Merge branch 'refs/heads/feature/v5.0/5.0.5' into patch_management
| | |
| | | const workspaceId = localStorage.getItem(ELocalStorageKey.WorkspaceId) || '' |
| | | |
| | | export const putDeviceProps = (deviceSn, body) => { |
| | | console.log(deviceSn, body, workspaceId, '8888') |
| | | return request({ |
| | | url: `/drone-device-core/manage/api/v1/devices/${workspaceId}/devices/${deviceSn}/property`, |
| | | method: 'put', |
| | | body, |
| | | data: body, |
| | | }) |
| | | } |
| | | |
| | | /** |
| | | * 设置调色盘 |
| | | * @param {机场编码} deviceSn |
| | |
| | | calcHeight: 20, |
| | | column: [ |
| | | { |
| | | label: '工作空间名称', |
| | | label: '设备名称',// '工作空间名称', |
| | | prop: 'workspace_name', |
| | | editDisabled: true, |
| | | searchLabelWidth: 130, |
| | |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请输入工作空间名称', |
| | | message: '请输入设备名称', |
| | | trigger: 'blur', |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | label: '工作空间描述', |
| | | prop: 'workspace_desc', |
| | | labelWidth: 130, |
| | | // search: true, |
| | | searchSpan: 4, |
| | | // editDisabled: true, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请输入工作空间描述', |
| | | trigger: 'blur', |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | label: '平台名称', |
| | | label: '系统名称',// '平台名称', |
| | | prop: 'platform_name', |
| | | labelWidth: 130, |
| | | editDisabled: true, |
| | | rules: [ |
| | | { |
| | | required: false, |
| | | message: '请输入平台名称', |
| | | message: '请输入系统名称', |
| | | trigger: 'blur', |
| | | }, |
| | | ], |
| | | }, |
| | | |
| | | { |
| | | label: '所属单位', |
| | | prop: 'dept_id', |
| | |
| | | ], |
| | | }, |
| | | { |
| | | label: '设备描述',// '工作空间描述', |
| | | prop: 'workspace_desc', |
| | | labelWidth: 130, |
| | | // search: true, |
| | | searchSpan: 4, |
| | | // editDisabled: true, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请输入设备描述', |
| | | trigger: 'blur', |
| | | }, |
| | | ], |
| | | }, |
| | | |
| | | { |
| | | label: '创建时间', |
| | | prop: 'create_time', |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | overHidden: true, |
| | | type: 'date', |
| | | labelWidth: 130, |
| | | width: 160, |
| | |
| | | |
| | | }, |
| | | { |
| | | label: '行政区划', |
| | | label: '设备位置',// '行政区划', |
| | | prop: 'area_code', |
| | | type: 'cascader', |
| | | labelWidth: 130, |
| | |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请选择行政区划', |
| | | message: '请选择设备位置', |
| | | trigger: 'change', |
| | | }, |
| | | ], |
| | |
| | | :percentage="row.firmware_progress"></el-progress> |
| | | </div> |
| | | </template> |
| | | <template #domain="{ row }"> |
| | | <span class="text"> |
| | | {{ row.domain == 3 ? '机巢' : row.domain == 0 ? '无人机' : '其他' }} |
| | | </span> |
| | | </template> |
| | | <template #mode_code="{ row }"> |
| | | <span class="text" v-if="row.domain == 3" :style="row.mode_code != '-1' ? 'color: #00ee8b' : 'color: #de5e5e'"> |
| | | {{ getDockModeText(row.mode_code) }} |
| | | <span class="text" v-if="row.domain == 3 || row.domain == 0" :style="row.mode_code != '-1' ? 'color: #00ee8b' : 'color: #de5e5e'"> |
| | | {{ getModelText(row.mode_code) }} |
| | | </span> |
| | | </template> |
| | | <template #menu="scope"> |
| | | <el-button type="primary" text icon="el-icon-paperclip" v-if="permission.oss_set" |
| | | @click.stop="handleOpenOssSet(scope.row, scope.index)">存储配置 |
| | | </el-button> |
| | | <el-dropdown> |
| | | <el-button type="primary" text icon="el-icon-more" v-if="permission.oss_set">更 多</el-button> |
| | | <template #dropdown v-if="scope.row.domain == 3"> |
| | | <el-dropdown-menu teleported> |
| | | <el-dropdown-item command="a"> |
| | | <el-button type="primary" text icon="el-icon-paperclip" v-if="permission.oss_set" @click.stop="handleOpenOssSet(scope.row, scope.index)">存储配置</el-button> |
| | | </el-dropdown-item> |
| | | <el-dropdown-item command="b"> |
| | | <el-button type="primary" text icon="el-icon-share" v-if="permission.per_share && scope.row.domain == 3" |
| | | @click.stop="handleOpenDevicePerShare(scope.row, scope.index)">机场授权 |
| | | </el-button> |
| | | |
| | | <el-button type="primary" text icon="el-icon-position" :disabled="!scope.row.status" |
| | | @click.stop="handleOpenDevicePerShare(scope.row, scope.index)">机场授权</el-button> |
| | | </el-dropdown-item> |
| | | <el-dropdown-item command="c"> <el-button type="primary" text icon="el-icon-position" :disabled="!scope.row.status" |
| | | v-if="permission.rang_con && scope.row.domain == 3" |
| | | @click.stop="handleOpenRemoteDebugging(scope.row, scope.index)">远程调试 |
| | | </el-button> |
| | | |
| | | <el-button type="primary" text icon="el-icon-setting" v-if="permission.fly_device_offline" |
| | | @click.stop="handleDeviceOffline(scope.row)">设备下线 |
| | | </el-button> |
| | | @click.stop="handleOpenRemoteDebugging(scope.row, scope.index)">远程调试</el-button> |
| | | </el-dropdown-item> |
| | | <el-dropdown-item command="d"><el-button type="primary" text icon="el-icon-collection" v-if="permission.fly_device_offline" |
| | | @click.stop="rollFirmware(scope.row)">固件版本管理</el-button> |
| | | </el-dropdown-item> |
| | | <el-dropdown-item command="e"><el-button type="primary" text icon="el-icon-document-delete" v-if="permission.fly_device_offline" |
| | | @click.stop="handleDeviceOffline(scope.row)">注销</el-button> |
| | | </el-dropdown-item> |
| | | </el-dropdown-menu> |
| | | </template> |
| | | <template #dropdown v-else> |
| | | <el-dropdown-menu teleported> |
| | | <el-dropdown-item command="a"> |
| | | <el-button type="primary" text icon="el-icon-circle-close" @click.stop="rowDel(scope.row, scope.index)">删除</el-button> |
| | | </el-dropdown-item> |
| | | <el-dropdown-item command="a"> |
| | | <el-button type="primary" text icon="el-icon-key" v-if="permission.operate_password_set" @click.stop="handleOperatePassword(scope.row, scope.index)">操控密码设置</el-button> |
| | | </el-dropdown-item> |
| | | </el-dropdown-menu> |
| | | </template> |
| | | </el-dropdown> |
| | | </template> |
| | | |
| | | <!-- 添加行政区划显示模板 --> |
| | | <template #area_code="{ row }"> |
| | | <span>{{ row.area_name }}</span> |
| | | </template> |
| | | </avue-crud> |
| | | |
| | | <el-dialog title="操控密码设置" append-to-body v-model="operatePasswordSetBox" width="450px"> |
| | | <el-form :model="passwordForm" ref="passwordForm" label-width="80px" :rules="rules" v-loading="loadingForm"> |
| | | <el-form-item label="密码" prop="password"> |
| | | <el-input type="password" v-model="passwordForm.password" placeholder="请输入密码" show-password></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="确认密码" prop="password2"> |
| | | <el-input type="password" v-model="passwordForm.password2" placeholder="请输入确认密码" show-password></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button @click="operatePasswordSetBox = false">取 消</el-button> |
| | | <el-button type="primary" @click="setOperatePasswordConfirm">确 定</el-button> |
| | | </span> |
| | | </template> |
| | | </el-dialog> |
| | | |
| | | <el-dialog title="操控密码查看" append-to-body v-model="operatePasswordViewBox" width="455px"> |
| | | <el-input v-model="operate_password" disabled></el-input> |
| | | </el-dialog> |
| | | |
| | | <el-dialog title="固件升级" append-to-body v-model="firmwareBox" width="455px"> |
| | | <div>升级固件版本:{{ firmwareVersion }}</div> |
| | |
| | | |
| | | <script> |
| | | import { ElMessage, ElMessageBox } from 'element-plus' |
| | | |
| | | import { pxToRem } from '@/utils/rem' |
| | | import { |
| | | getList, |
| | | remove, |
| | |
| | | DockControlPanel, |
| | | }, |
| | | data () { |
| | | const validatePass = (rule, value, callback) => { |
| | | if (value === '') { |
| | | callback(new Error('请输入密码')) |
| | | } else { |
| | | callback() |
| | | } |
| | | } |
| | | const validatePass2 = (rule, value, callback) => { |
| | | if (value === '') { |
| | | callback(new Error('请再次输入密码')) |
| | | } else if (value !== this.passwordForm.password) { |
| | | callback(new Error('两次输入密码不一致!')) |
| | | } else { |
| | | callback() |
| | | } |
| | | } |
| | | return { |
| | | rules: { |
| | | password: [{ required: true, validator: validatePass, trigger: 'blur' }], |
| | | password2: [{ required: true, validator: validatePass2, trigger: 'blur' }], |
| | | }, |
| | | passwordForm: { |
| | | id: '', |
| | | password: '', |
| | | password2: '', |
| | | }, |
| | | operatePasswordSetBox: false, |
| | | operatePasswordViewBox: false, |
| | | operate_password: '', |
| | | bindOssId: null, |
| | | deviceSn: '', |
| | | ossSetBox: false, |
| | |
| | | border: true, |
| | | index: true, |
| | | viewBtn: true, |
| | | delBtn: false, |
| | | selection: true, |
| | | excelBtn: false, |
| | | addBtn: false, |
| | |
| | | |
| | | column: [ |
| | | { |
| | | label: '设备类型', |
| | | prop: 'domain', |
| | | editDisabled: true, |
| | | editDisplay: false, //编辑显示 |
| | | viewDisplay: true, //查看显示 |
| | | search: false, |
| | | slot: true, |
| | | searchSpan: 4, |
| | | labelWidth: 130, |
| | | width: 120, |
| | | // rules: [ |
| | | // { |
| | | // required: true, |
| | | // message: '请输入设备类型', |
| | | // trigger: 'blur', |
| | | // }, |
| | | // ], |
| | | }, |
| | | { |
| | | label: '设备型号', |
| | | prop: 'device_name', |
| | | editDisabled: true, |
| | | search: true, |
| | | viewDisplay: true, //查看显示 |
| | | search: false, |
| | | searchSpan: 4, |
| | | labelWidth: 130, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请输入设备型号', |
| | | trigger: 'blur', |
| | | }, |
| | | ], |
| | | width: 120, |
| | | // rules: [ |
| | | // { |
| | | // required: true, |
| | | // message: '请输入设备型号', |
| | | // trigger: 'blur', |
| | | // }, |
| | | // ], |
| | | }, |
| | | { |
| | | label: '设备SN', |
| | | prop: 'device_sn', |
| | | labelWidth: 130, |
| | | search: true, |
| | | width: 120, |
| | | overHidden: true, |
| | | searchSpan: 4, |
| | | editDisabled: true, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请输入设备SN', |
| | | trigger: 'blur', |
| | | // rules: [ |
| | | // { |
| | | // required: true, |
| | | // message: '请输入设备SN', |
| | | // trigger: 'blur', |
| | | // }, |
| | | // ], |
| | | }, |
| | | ], |
| | | }, |
| | | // { |
| | | // label: '机巢编号', |
| | | // prop: 'machine_nest_sn', |
| | | // labelWidth: 130, |
| | | // editDisabled: true, |
| | | // rules: [ |
| | | // { |
| | | // required: false, |
| | | // message: '请输入机巢编号', |
| | | // trigger: 'blur', |
| | | // }, |
| | | // ], |
| | | // }, |
| | | { |
| | | label: '机巢编号', |
| | | prop: 'machine_nest_sn', |
| | | labelWidth: 130, |
| | | editDisabled: true, |
| | | rules: [ |
| | | { |
| | | required: false, |
| | | message: '请输入机巢编号', |
| | | trigger: 'blur', |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | label: '设备组织名称', |
| | | label: '设备名称', |
| | | prop: 'nickname', |
| | | labelWidth: 130, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请输入设备组织名称', |
| | | trigger: 'blur', |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | label: '固件版本', |
| | | prop: 'firmware_version', |
| | | labelWidth: 130, |
| | | width: 100, |
| | | editDisabled: true, |
| | | searchSpan: 4, |
| | | search: true, |
| | | overHidden: true, |
| | | editDisplay: true, //编辑显示 |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请输入固件版本', |
| | | message: '请输入设备名称', |
| | | trigger: 'blur', |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | label: '固件升级', |
| | | prop: 'firmware_status', |
| | | labelWidth: 130, |
| | | width: 100, |
| | | viewDisabled: true, |
| | | addDisabled: true, |
| | | editDisabled: true, |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | viewDisplay: false, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请输入固件升级', |
| | | trigger: 'blur', |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | label: '所属单位', |
| | | prop: 'dept_name', |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | viewDisplay: false, |
| | | labelWidth: 130, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请输入所属单位', |
| | | trigger: 'blur', |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | label: '所属单位', |
| | | prop: 'dept_id', |
| | | hide: true, |
| | | type: 'tree', |
| | | defaultExpandAll: true, |
| | | labelWidth: 130, |
| | | dicUrl: '/blade-system/dept/getTree', |
| | | props: { |
| | | label: 'name', |
| | | value: 'id', |
| | | }, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请输入所属单位', |
| | | trigger: 'blur', |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | label: '加入组织时间', |
| | | prop: 'bound_time', |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | type: 'date', |
| | | labelWidth: 130, |
| | | width: 160, |
| | | format: 'YYYY-MM-DD HH:mm:ss', |
| | | // valueFormat: 'YYYY-MM-DD HH:mm:ss', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请输入在线状态', |
| | | trigger: 'blur', |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | label: '行政区划', |
| | | label: '设备位置',// '行政区划', |
| | | prop: 'area_name', |
| | | hide: true, |
| | | // hide: true, |
| | | overHidden: true, |
| | | editDisplay: false, //编辑显示 |
| | | viewDisplay: true, //查看显示 |
| | | viewDisplay: false, //查看显示 |
| | | labelWidth: 130, |
| | | width: 100, |
| | | }, |
| | | { |
| | | label: '行政区划', |
| | | label: '设备位置', |
| | | prop: 'area_code', |
| | | type: 'cascader', |
| | | labelWidth: 130, |
| | | searchSpan: 4, |
| | | hide: true, |
| | | search: true, |
| | | // overHidden: true, |
| | | editDisplay: true, |
| | | viewDisplay: false, |
| | | viewDisplay: true, |
| | | props: { |
| | | label: 'title', |
| | | value: 'value', |
| | |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请选择行政区划', |
| | | message: '请选择设备位置', |
| | | trigger: 'change', |
| | | }, |
| | | ], |
| | |
| | | } |
| | | }, |
| | | }, |
| | | // { |
| | | // label: '设备位置', |
| | | // prop: 'address', |
| | | // labelWidth: 130, |
| | | // width: 100, |
| | | // overHidden: true, |
| | | // rules: [ |
| | | // { |
| | | // required: true, |
| | | // message: '请输入设备位置', |
| | | // trigger: 'blur', |
| | | // }, |
| | | // ], |
| | | // }, |
| | | |
| | | { |
| | | label: '负载设备', |
| | | prop: 'payload_str', |
| | | labelWidth: 130, |
| | | width: 100, |
| | | overHidden: true, |
| | | editDisabled: true, |
| | | // rules: [ |
| | | // { |
| | | // required: true, |
| | | // message: '请输入负载设备', |
| | | // trigger: 'blur', |
| | | // }, |
| | | // ], |
| | | }, |
| | | // { |
| | | // label: '保险有效期', |
| | | // prop: 'insureExpiredTime', |
| | | // labelWidth: 130, |
| | | // width: 110, |
| | | // rules: [ |
| | | // { |
| | | // required: true, |
| | | // message: '请输入保险有效期', |
| | | // trigger: 'blur', |
| | | // }, |
| | | // ], |
| | | // }, |
| | | { |
| | | label: '流量剩余', |
| | | prop: 'traffic_remaining', |
| | | labelWidth: 130, |
| | | width: 100, |
| | | editDisabled: true, |
| | | // rules: [ |
| | | // { |
| | | // required: true, |
| | | // message: '请输入流量剩余', |
| | | // trigger: 'blur', |
| | | // }, |
| | | // ], |
| | | }, |
| | | { |
| | | label: '流量到期时间', |
| | | prop: 'traffic_expire_time', |
| | | labelWidth: 130, |
| | | width: 120, |
| | | type: 'date', |
| | | format: 'YYYY-MM-DD', |
| | | editDisabled: true, |
| | | // rules: [ |
| | | // { |
| | | // required: true, |
| | | // message: '请输入流量到期时间', |
| | | // trigger: 'blur', |
| | | // }, |
| | | // ], |
| | | }, |
| | | { |
| | | label: '固件版本', |
| | | prop: 'firmware_version', |
| | | labelWidth: 130, |
| | | width: 110, |
| | | editDisabled: true, |
| | | // rules: [ |
| | | // { |
| | | // required: true, |
| | | // message: '请输入固件版本', |
| | | // trigger: 'blur', |
| | | // }, |
| | | // ], |
| | | }, |
| | | { |
| | | label: '固件升级', |
| | | prop: 'firmware_status', |
| | | labelWidth: 130, |
| | | width: 100, |
| | | hide: true, |
| | | viewDisabled: true, |
| | | addDisabled: true, |
| | | editDisabled: true, |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | viewDisplay: false, |
| | | // rules: [ |
| | | // { |
| | | // required: true, |
| | | // message: '请输入固件升级', |
| | | // trigger: 'blur', |
| | | // }, |
| | | // ], |
| | | }, |
| | | { |
| | | label: '所属单位', |
| | | prop: 'dept_name', |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | viewDisplay: false, |
| | | labelWidth: 130, |
| | | width: 180, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请输入所属单位', |
| | | trigger: 'blur', |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | label: '所属单位', |
| | | prop: 'dept_id', |
| | | hide: true, |
| | | type: 'tree', |
| | | defaultExpandAll: true, |
| | | search: true, |
| | | searchSpan: 4, |
| | | labelWidth: 130, |
| | | dicUrl: '/blade-system/dept/getTree', |
| | | props: { |
| | | label: 'name', |
| | | value: 'id', |
| | | }, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请输入所属单位', |
| | | trigger: 'blur', |
| | | }, |
| | | ], |
| | | }, |
| | | // { |
| | | // label: '加入组织时间', |
| | | // prop: 'bound_time', |
| | | // addDisplay: false, |
| | | // editDisplay: false, |
| | | // type: 'date', |
| | | // labelWidth: 130, |
| | | // width: 160, |
| | | // format: 'YYYY-MM-DD HH:mm:ss', |
| | | // // valueFormat: 'YYYY-MM-DD HH:mm:ss', |
| | | // rules: [ |
| | | // { |
| | | // required: true, |
| | | // message: '请输入在线状态', |
| | | // trigger: 'blur', |
| | | // }, |
| | | // ], |
| | | // }, |
| | | |
| | | |
| | | { |
| | | hide: true, |
| | |
| | | label: '在线时间', |
| | | prop: 'login_time', |
| | | type: 'date', |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | editDisplay: true, //编辑显示 |
| | | editDisabled: true, |
| | | viewDisplay: true, //查看显示 |
| | | addDisplay: true, |
| | | labelWidth: 130, |
| | | width: 160, |
| | | overHidden: true, |
| | | format: 'YYYY-MM-DD HH:mm:ss', |
| | | // valueFormat: 'YYYY-MM-DD HH:mm:ss', |
| | | startPlaceholder: '任务开始时间', |
| | | // rules: [ |
| | | // { |
| | | // required: true, |
| | | // message: '请输入在线时间', |
| | | // trigger: 'blur', |
| | | // }, |
| | | // ], |
| | | }, |
| | | { |
| | | label: '注册时间', |
| | | prop: 'create_time', |
| | | type: 'date', |
| | | editDisplay: true, //编辑显示 |
| | | editDisabled: true, |
| | | viewDisplay: true, //查看显示 |
| | | addDisplay: true, |
| | | overHidden: true, |
| | | labelWidth: 130, |
| | | width: 160, |
| | | format: 'YYYY-MM-DD HH:mm:ss', |
| | | // valueFormat: 'YYYY-MM-DD HH:mm:ss', |
| | | startPlaceholder: '任务开始时间', |
| | | rules: [ |
| | | { |
| | | required: true, |
| | | message: '请输入在线时间', |
| | | trigger: 'blur', |
| | | }, |
| | | ], |
| | | startPlaceholder: '创建时间', |
| | | // rules: [ |
| | | // { |
| | | // required: true, |
| | | // message: '请输入创建时间', |
| | | // trigger: 'blur', |
| | | // }, |
| | | // ], |
| | | }, |
| | | { |
| | | label: '在线状态', |
| | | label: '设备状态', |
| | | prop: 'cnstatus', |
| | | hide: true, |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | viewDisplay: true, |
| | | viewDisplay: false, |
| | | labelWidth: 130, |
| | | }, |
| | | { |
| | | label: '在线状态', |
| | | label: '设备状态', |
| | | prop: 'status', |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | viewDisplay: false, |
| | | labelWidth: 130, |
| | | labelWidth: 100, |
| | | hide: true, |
| | | // searchSpan: 4, |
| | | // search: true, |
| | | slot: true, |
| | | width: 100, |
| | | |
| | |
| | | ], |
| | | }, |
| | | { |
| | | label: '机场状态', |
| | | label: '设备状态', |
| | | prop: 'cnmode_code', |
| | | hide: true, |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | viewDisplay: true, |
| | | labelWidth: 130, |
| | | width: 110, |
| | | }, |
| | | { |
| | | label: '机场状态', |
| | | label: '设备状态', |
| | | prop: 'mode_code', |
| | | |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | viewDisplay: false, |
| | | labelWidth: 130, |
| | | searchSpan: 4, |
| | | search: true, |
| | | type: 'select', |
| | | dicData: [ |
| | | { label: '在线', value: 0 }, |
| | | { label: '离线', value: -1 }, |
| | | { label: '远程调试', value: 2 }, |
| | | { label: '现场调试', value: 1 }, |
| | | { label: '固件升级中', value: 3 } |
| | | ], |
| | | slot: true, |
| | | width: 100, |
| | | width: 110, |
| | | |
| | | rules: [ |
| | | { |
| | |
| | | } |
| | | }) |
| | | }, |
| | | mounted() { |
| | | |
| | | }, |
| | | methods: { |
| | | getDockModeText (value) { |
| | | return EDockModeText[value] || '' |
| | | }, |
| | | getModelText (value) { |
| | | let txt = '离线' |
| | | if (value === 0 || value === 4) { |
| | | txt = '在线' |
| | | } else if(value === 1) { |
| | | txt = '现场调试' |
| | | } else if(value === 2) { |
| | | txt = '远程调试' |
| | | } else if(value === 3) { |
| | | txt = '固件升级中' |
| | | } |
| | | return txt |
| | | }, |
| | | // 关闭所有的webscoket |
| | | closeAllWebsoket () { |
| | |
| | | |
| | | // 设备下线 |
| | | handleDeviceOffline (row) { |
| | | ElMessageBox.confirm('确定下线该设备吗?', '提示', { |
| | | ElMessageBox.confirm('确定注销该设备吗?', '提示', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning', |
| | |
| | | .then(() => { |
| | | deviceOffline(row.device_sn) |
| | | .then(res => { |
| | | ElMessage.success('下线成功') |
| | | ElMessage.success('注销成功') |
| | | |
| | | this.init() |
| | | }) |
| | | .catch(error => { |
| | | ElMessage.error('下线失败') |
| | | ElMessage.error('注销失败') |
| | | }) |
| | | }) |
| | | .catch(() => { }) |
| | |
| | | area_code: await this.getFullAreaCode(data.area_code), |
| | | area_name: this.form.area_name, |
| | | cnmode_code: this.getDockModeText(this.form.mode_code), |
| | | domain: data.domain === 0 ? '无人机' : data.domain === 3 ? '机巢' : '未知', |
| | | cnstatus: this.form.status === false ? '离线' : '在线', |
| | | duration_of_insurance: [data?.insure_start_time || '', data?.insure_expired_time || ''], |
| | | } |
| | |
| | | const data = res.data.data.records |
| | | resolve(data) |
| | | }) |
| | | }, |
| | | rowDel (row) { |
| | | this.$confirm('确定将选择数据删除?', { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning', |
| | | }) |
| | | .then(() => { |
| | | return remove(row.id) |
| | | }) |
| | | .then(() => { |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: 'success', |
| | | message: '操作成功!', |
| | | }) |
| | | }) |
| | | }, |
| | | // 设置无人机操作密码 |
| | | setOperatePasswordConfirm () { |
| | | var that = this |
| | | this.$refs.passwordForm.validate(valid => { |
| | | if (valid) { |
| | | this.loadingForm = true |
| | | const data = { |
| | | id: this.passwordForm.id, |
| | | operate_password: this.passwordForm.password, |
| | | } |
| | | // 提交 |
| | | operatePasswordUpdate(data).then(res => { |
| | | this.loadingForm = false |
| | | this.operatePasswordSetBox = false |
| | | that.passwordForm = {} |
| | | this.onLoad(this.page) |
| | | this.$message({ |
| | | type: 'success', |
| | | message: '操作成功!', |
| | | }) |
| | | }) |
| | | } else { |
| | | console.log('error submit!!') |
| | | return false |
| | | } |
| | | }) |
| | | }, |
| | | // 操作密码设置 |
| | | handleOperatePassword (row) { |
| | | this.operatePasswordSetBox = true |
| | | this.passwordForm.id = row.id |
| | | }, |
| | | }, |
| | | } |
| | |
| | | border-color: #409eff; |
| | | } |
| | | } |
| | | :deep(.avue-crud__menu) { |
| | | display: flex; |
| | | } |
| | | .more-container { |
| | | position: relative; |
| | | } |
| | | .show-more-do { |
| | | position: absolute; |
| | | background-color: #ffffff; |
| | | // border: 1px solid #409eff; |
| | | z-index: 9999; |
| | | box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); |
| | | width: 140px; |
| | | font-size: 12px; |
| | | // height: 140px; |
| | | height: 190px; |
| | | right: 0; |
| | | } |
| | | |
| | | |
| | | </style> |
| | |
| | | <span class="form-label" |
| | | >{{ deviceSetting[DeviceSettingKeyEnum.NIGHT_LIGHTS_MODE_SET].label }}:</span |
| | | > |
| | | <a-switch |
| | | checked-children="开" |
| | | un-checked-children="关" |
| | | v-model:checked="deviceSettingFormModel.nightLightsState" |
| | | <el-switch |
| | | active-text="开" |
| | | inactive-text="关" |
| | | v-model="deviceSettingFormModel.nightLightsState" |
| | | /> |
| | | </div> |
| | | </template> |
| | | <a |
| | | @click=" |
| | | @click.stop=" |
| | | onShowPopConfirm( |
| | | deviceSetting[DeviceSettingKeyEnum.NIGHT_LIGHTS_MODE_SET].settingKey |
| | | ) |
| | |
| | | <template #formContent> |
| | | <div class="form-content"> |
| | | <span class="form-label" |
| | | >{{ deviceSetting[DeviceSettingKeyEnum.HEIGHT_LIMIT_SET].label }}:</span |
| | | >{{ deviceSetting[DeviceSettingKeyEnum.HEIGHT_LIMIT_SET].label }}:(m)</span |
| | | > |
| | | <a-input-number |
| | | v-model:value="deviceSettingFormModel.heightLimit" |
| | | <el-input-number |
| | | size="small" |
| | | v-model="deviceSettingFormModel.heightLimit" |
| | | :min="20" |
| | | :max="1500" |
| | | /> |
| | | m |
| | | |
| | | </div> |
| | | </template> |
| | | <a |
| | |
| | | <span class="form-label" |
| | | >{{ deviceSetting[DeviceSettingKeyEnum.DISTANCE_LIMIT_SET].label }}:</span |
| | | > |
| | | <a-switch |
| | | <el-switch |
| | | style="margin-right: 10px" |
| | | checked-children="开" |
| | | un-checked-children="关" |
| | | v-model:checked="deviceSettingFormModel.distanceLimitStatus.state" |
| | | active-text="开" |
| | | inactive-text="关" |
| | | v-model="deviceSettingFormModel.distanceLimitStatus.state" |
| | | /> |
| | | <a-input-number |
| | | v-model:value="deviceSettingFormModel.distanceLimitStatus.distanceLimit" |
| | | <el-input-number |
| | | size="small" |
| | | v-model="deviceSettingFormModel.distanceLimitStatus.distanceLimit" |
| | | :min="15" |
| | | :max="8000" |
| | | /> |
| | |
| | | <span class="form-label" |
| | | >{{ deviceSetting[DeviceSettingKeyEnum.OBSTACLE_AVOIDANCE_HORIZON].label }}:</span |
| | | > |
| | | <a-switch |
| | | checked-children="开" |
| | | un-checked-children="关" |
| | | v-model:checked="deviceSettingFormModel.obstacleAvoidanceHorizon" |
| | | <el-switch |
| | | active-text="开" |
| | | inactive-text="关" |
| | | v-model="deviceSettingFormModel.obstacleAvoidanceHorizon" |
| | | /> |
| | | </div> |
| | | </template> |
| | |
| | | <span class="form-label" |
| | | >{{ deviceSetting[DeviceSettingKeyEnum.OBSTACLE_AVOIDANCE_UPSIDE].label }}:</span |
| | | > |
| | | <a-switch |
| | | checked-children="开" |
| | | un-checked-children="关" |
| | | v-model:checked="deviceSettingFormModel.obstacleAvoidanceUpside" |
| | | <el-switch |
| | | active-text="开" |
| | | inactive-text="关" |
| | | v-model="deviceSettingFormModel.obstacleAvoidanceUpside" |
| | | /> |
| | | </div> |
| | | </template> |
| | |
| | | deviceSetting[DeviceSettingKeyEnum.OBSTACLE_AVOIDANCE_DOWNSIDE].label |
| | | }}:</span |
| | | > |
| | | <a-switch |
| | | checked-children="开" |
| | | un-checked-children="关" |
| | | v-model:checked="deviceSettingFormModel.obstacleAvoidanceDownside" |
| | | <el-switch |
| | | active-text="开" |
| | | inactive-text="关" |
| | | v-model="deviceSettingFormModel.obstacleAvoidanceDownside" |
| | | /> |
| | | </div> |
| | | </template> |
| | |
| | | |
| | | <script setup> |
| | | import { defineProps, ref, watch } from 'vue'; |
| | | import { ELocalStorageKey } from '@/types' |
| | | import { cloneDeep } from 'lodash'; |
| | | import { initDeviceSetting, initDeviceSettingFormModel } from '@/types/device-setting'; |
| | | import { initDeviceSetting, initDeviceSettingFormModel, DeviceSettingKeyEnum } from '@/types/device-setting'; |
| | | import { |
| | | updateDeviceSettingInfoByOsd, |
| | | updateDeviceSettingFormModelByOsd, |
| | | } from '@/utils/device-setting'; |
| | | import { useDeviceSetting } from './use-device-setting'; |
| | | import DeviceSettingPopover from './DeviceSettingPopover.vue' |
| | | |
| | | const props = defineProps(); |
| | | // const props = defineProps(); |
| | | const props = defineProps(['sn', 'deviceInfo']) |
| | | |
| | | const deviceSetting = ref(cloneDeep(initDeviceSetting)); |
| | | const deviceSettingFormModelFromOsd = ref(cloneDeep(initDeviceSettingFormModel)); |
| | |
| | | async function onConfirm(settingKey) { |
| | | deviceSetting.value[settingKey].popConfirm.loading = true; |
| | | const body = genDevicePropsBySettingKey(settingKey, deviceSettingFormModel.value); |
| | | localStorage.setItem(ELocalStorageKey.WorkspaceId, props.deviceInfo.workspace_id) |
| | | await setDeviceProps(props.sn, body); |
| | | deviceSetting.value[settingKey].popConfirm.loading = false; |
| | | deviceSetting.value[settingKey].popConfirm.visible = false; |
| | |
| | | |
| | | <style lang="scss" scoped> |
| | | .device-setting-wrapper { |
| | | border-bottom: 1px solid #515151; |
| | | //border-bottom: 1px solid #515151; |
| | | |
| | | .device-setting-header { |
| | | font-size: 14px; |
| | |
| | | font-weight: 700; |
| | | } |
| | | } |
| | | .control-setting-item-right { |
| | | .el-tooltip__trigger { |
| | | color: #1C5CFF; |
| | | cursor: pointer; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | |
| | | <template> |
| | | <a-popover |
| | | <el-popover |
| | | :visible="state.sVisible" |
| | | trigger="click" |
| | | v-bind="$attrs" |
| | | :overlay-class-name="overlayClassName" |
| | | placement="bottom" |
| | | @visibleChange="" |
| | | v-on="$attrs" |
| | | width="200" |
| | | > |
| | | <template #content> |
| | | <template #default> |
| | | <div class="title-content"></div> |
| | | <slot name="formContent" /> |
| | | <div class="uranus-popconfirm-btns"> |
| | | <a-button size="sm" @click="onCancel"> |
| | | <el-button @click="onCancel"> |
| | | {{ cancelText || '取消' }} |
| | | </a-button> |
| | | <a-button |
| | | size="sm" |
| | | </el-button> |
| | | <el-button |
| | | :loading="loading" |
| | | type="primary" |
| | | class="confirm-btn" |
| | | @click="onConfirm" |
| | | > |
| | | {{ okText || '确定' }} |
| | | </a-button> |
| | | </el-button> |
| | | </div> |
| | | </template> |
| | | <template v-if="$slots.default"> |
| | | <template #reference> |
| | | <slot></slot> |
| | | </template> |
| | | </a-popover> |
| | | </el-popover> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { defineProps, defineEmits, reactive, watch, computed } from 'vue'; |
| | | |
| | | const props = defineProps(); |
| | | const props = defineProps(['visible', 'loading', 'disabled', 'title', 'cancelText', 'okText', 'width']); |
| | | |
| | | const emit = defineEmits(['cancel', 'confirm']); |
| | | |
| | |
| | | <!-- title --> |
| | | |
| | | <!-- setting --> |
| | | <!-- <DeviceSettingBox :sn="props.sn" :deviceInfo="props.deviceInfo"></DeviceSettingBox> --> |
| | | <DeviceSettingBox :sn="props.sn" :deviceInfo="props.deviceInfo"></DeviceSettingBox> |
| | | <!-- cmd --> |
| | | <div class="control-cmd-wrapper"> |
| | | <div class="control-cmd-header"> |
| | |
| | | import { EDockModeCode } from '@/types/device' |
| | | import { updateDeviceCmdInfoByOsd, updateDeviceCmdInfoByExecuteInfo } from '@/utils/device-cmd' |
| | | import { setThermalCurrentPaletteStyle, setPhotoStorageSet, setVideoStorageSet, getLiveStatus, setStreamsSwitch, photoAndVideoCmd } from '@/api/device-setting' |
| | | |
| | | import DeviceSettingBox from './DeviceSettingBox.vue' |
| | | import Store from '@/store' |
| | | import { useConnectWebSocket } from '@/utils/websocket/connect-websocket'; |
| | | import { getWebsocketUrl } from '@/utils/websocket/config'; |
| | |
| | | NightLightsStateEnum, |
| | | DistanceLimitStatusEnum, |
| | | } from '@/types/device-setting'; |
| | | import { messages } from '@/lang'; |
| | | |
| | | export function useDeviceSetting() { |
| | | // 生成参数 |
| | |
| | | async function setDeviceProps(sn, body) { |
| | | try { |
| | | const { code, message: msg } = await putDeviceProps(sn, body); |
| | | console.log(code,messages) |
| | | if (code === 0) { |
| | | return true; |
| | | ElMessage({ |
| | | message: '设备属性设置成功!', |
| | | type: 'success', |
| | | }); |
| | | } |
| | | throw msg; |
| | | } catch (e) { |
| | | ElMessage({ |
| | | message: '设备属性设置失败', |
| | | type: 'error', |
| | | }); |
| | | // ElMessage({ |
| | | // message: '设备属性设置失败', |
| | | // type: 'error', |
| | | // }); |
| | | return false; |
| | | } |
| | | } |
| | |
| | | --> |
| | | <template> |
| | | <basic-container> |
| | | <el-tabs v-model="activeName" @tab-click="handleClick"> |
| | | <airport ref="airport" /> |
| | | <!-- <el-tabs v-model="activeName" @tab-click="handleClick"> |
| | | <el-tab-pane label="机场" name="1"> |
| | | <airport ref="airport" /> |
| | | </el-tab-pane> |
| | | <el-tab-pane label="飞行器" name="2"> |
| | | <fly ref="fly" /> |
| | | </el-tab-pane> |
| | | </el-tabs> |
| | | </el-tabs> --> |
| | | </basic-container> |
| | | </template> |
| | | |
| | |
| | | <div class="more" v-if="isExpand" @click="toggleExpand">收起</div> |
| | | <div class="more" v-else @click="toggleExpand">更多</div> |
| | | <div class="search-btn" :style="{ bottom: isExpand ? '5px' : '-3px' }"> |
| | | <div class="btn clear" @click="handleReset"> |
| | | <img src="@/assets/images/task/clear.png" />重置 |
| | | </div> |
| | | <div class="btn search" @click="handleSearch"> |
| | | <img src="@/assets/images/task/search.png" />搜索 |
| | | </div> |
| | | <!-- <div class="btn add" @click="addTask"><img src="@/assets/images/task/add.png"/>新增</div> --> |
| | | |
| | | <el-button type="primary" icon="el-icon-search" @click="handleSearch">搜索</el-button> |
| | | <el-button icon="el-icon-refresh" @click="handleReset">清空</el-button> |
| | | </div> |
| | | <el-form-item label="任务算法:" v-if="isExpand" class="taskAlgorithm"> |
| | | <!-- <TaskAlgorithmBusiness |
| | |
| | | @algorithmChange="algorithmChange" |
| | | /> --> |
| | | <el-tree-select |
| | | popper-class="custom-tree-select" |
| | | style="z-index: 1000" |
| | | :teleported="false" |
| | | class="custom-tree-select" |
| | | :style="{ width: pxToRem(186) }" |
| | | v-model="dictKey" |
| | | :data="dataList" |
| | | :default-expanded-keys="[dictKey]" |
| | | check-strictly |
| | | node-key="id" |
| | | :props="treePropsSF" |
| | | @node-click="handleSFNodeClick" |
| | | :render-after-expand="false" |
| | | :default-checked-keys="checkedKeys" |
| | | node-key="id" |
| | | multiple |
| | | show-checkbox |
| | | collapse-tags |
| | | collapse-tags-tooltip |
| | | clearable |
| | | @node-click="handleNodeClick" |
| | | @check="handleCheck" |
| | | @clear="handleClear" |
| | | /> |
| | | </el-form-item> |
| | |
| | | </el-form-item> --> |
| | | <el-form-item label="任务状态:" v-if="isExpand"> |
| | | <el-select |
| | | style="z-index: 1000" |
| | | :teleported="false" |
| | | v-model="searchForm.status" |
| | | placeholder="请选择" |
| | |
| | | // { immediate: true, deep: true } |
| | | // ); |
| | | |
| | | const checkedKeys = ref([]) |
| | | |
| | | const handleCheck = (data, { checkedKeys, checkedNodes }) => { |
| | | dictKey.value = checkedKeys |
| | | // 获取所有选中节点的 dictKey |
| | | const selectedDictKeys = checkedNodes.map(node => node.dictKey).filter(Boolean) |
| | | searchForm.ai_types = selectedDictKeys |
| | | handleSearch() |
| | | } |
| | | |
| | | onBeforeUnmount(() => { |
| | | checked.value = 'today'; |
| | | searchForm.date_enum = 'TODAY'; |
| | |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="关联航线" prop="file_id"> |
| | | <el-select v-model="form.file_id" placeholder="请选择航线" @change="getFlyingNestBy"> |
| | | <el-select v-model="form.file_id" placeholder="请选择航线" filterable @change="getFlyingNestBy"> |
| | | <el-option v-for="item in wayLineList" :key="item.wayline_id" :label="item.name" |
| | | :value="item.wayline_id" /> |
| | | </el-select> |
| | |
| | | <el-row :gutter="20"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="关联机巢" prop="device_sns"> |
| | | <el-select v-model="form.device_sns" placeholder="请选择机巢" multiple> |
| | | <el-select v-model="form.device_sns" placeholder="请选择机巢" multiple :disabled="!device_sns.length"> |
| | | <el-option v-for="item in device_sns" :key="item.device_sn" :label="item.nickname" |
| | | :value="item.device_sn" /> |
| | | </el-select> |
| | |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="关联航线" prop="file_id"> |
| | | <el-select v-model="form.file_id" placeholder="请选择航线" @change="getFlyingNestBy" :disabled="detailTitle === '工单详情'"> |
| | | <el-select v-model="form.file_id" placeholder="请选择航线" @change="getFlyingNestBy" filterable :disabled="detailTitle === '工单详情'"> |
| | | <el-option v-for="item in wayLineList" :key="item.wayline_id" :label="item.name" |
| | | :value="item.wayline_id" /> |
| | | </el-select> |
| | |
| | | ], |
| | | file_id: [{ required: true, message: '需要选择航线', trigger: 'change' }], |
| | | device_sns: [{ required: true, message: '请选择机巢', trigger: 'change' }], |
| | | ai_types: [{ required: true, message: '请选择算法', trigger: 'change' }], |
| | | content: [ |
| | | { required: true, message: '请输入工单内容', trigger: 'blur' }, |
| | | { max: 255, message: '工单内容不能超过255个字', trigger: 'blur' }, |
| | |
| | | |
| | | const submitData = { |
| | | ...this.form, |
| | | |
| | | status: status, |
| | | ai_types: this.form.ai_types?.length ? this.form.ai_types : [], |
| | | } |
| | | // 判断该值this.form.date_range[0] 周几 和rep_fre_type 是不是相等 |
| | | // if (this.form.deal_time) { |
| | |
| | | :value="item.dict_key" |
| | | /> |
| | | </el-select> --> |
| | | <el-tree-select |
| | | <!-- <el-tree-select |
| | | popper-class="custom-tree-select" |
| | | :style="{ width: pxToRem(186) }" |
| | | placeholder="请选择关联算法" |
| | |
| | | :props="treePropsSF" |
| | | @node-click="handleSFNodeClick" |
| | | clearable |
| | | @clear="handleClear" |
| | | /> --> |
| | | <el-tree-select |
| | | style="z-index: 1000" |
| | | :teleported="false" |
| | | class="custom-tree-select" |
| | | :style="{ width: pxToRem(186) }" |
| | | v-model="dictKey" |
| | | :data="dataList" |
| | | :default-expanded-keys="[dictKey]" |
| | | :props="treePropsSF" |
| | | :render-after-expand="false" |
| | | :default-checked-keys="checkedKeys" |
| | | node-key="id" |
| | | multiple |
| | | show-checkbox |
| | | collapse-tags |
| | | collapse-tags-tooltip |
| | | clearable |
| | | @check="handleCheck" |
| | | @node-click="handleSFNodeClick" |
| | | @clear="handleClear" |
| | | /> |
| | | <el-select |
| | |
| | | }, |
| | | dictKey: '', |
| | | dataList: [], |
| | | checkedKeys: [], |
| | | }; |
| | | }, |
| | | created() { |
| | |
| | | }, |
| | | |
| | | methods: { |
| | | handleCheck(data, { checkedKeys, checkedNodes }) { |
| | | this.checkedKeys = checkedKeys |
| | | // 获取所有选中节点的 dictKey |
| | | const selectedDictKeys = checkedNodes.map(node => node.dictKey).filter(Boolean) |
| | | this.filters.type = selectedDictKeys |
| | | this.fetchTableData(); |
| | | }, |
| | | // 算法 |
| | | getAlgorithmList() { |
| | | getSFDictionaryTree({code:'SF'}).then((res) => { |
| | |
| | | }, |
| | | |
| | | handleSFNodeClick(data) { |
| | | console.log(data.dictKey, '666666666') |
| | | this.filters.type = '' |
| | | this.filters.algorithm = '' |
| | | if (data.children && data.children.length) { |
| | | // 获取子节点dictKey |
| | | this.filters.type = data.dictKey |
| | | } else { |
| | | this.filters.algorithm = data.dictKey |
| | | } |
| | | // 更新列表请求 |
| | | this.fetchTableData(); |
| | | }, |
| | |
| | | try { |
| | | const currentTab = this.tabs.find(tab => tab.name === this.activeTab); |
| | | const params = { |
| | | word_order_type: this.filters.type || undefined, |
| | | word_order_types: this.filters.type || undefined, |
| | | status: |
| | | currentTab?.name === 'myTickets' |
| | | ? undefined |
| | |
| | | } |
| | | |
| | | .date-picker { |
| | | width: 240px; // 日期选择器宽度适当调整 |
| | | // width: 240px; // 日期选择器宽度适当调整 |
| | | } |
| | | |
| | | .el-button { |
| | |
| | | dependencies: |
| | | ms "2.0.0" |
| | | |
| | | "decimal.js@^10.4.3": |
| | | "integrity" "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" |
| | | "resolved" "https://registry.npmmirror.com/decimal.js/-/decimal.js-10.4.3.tgz" |
| | | "version" "10.4.3" |
| | | decimal.js@^10.4.3: |
| | | version "10.4.3" |
| | | resolved "https://registry.npmmirror.com/decimal.js/-/decimal.js-10.4.3.tgz" |
| | | integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== |
| | | |
| | | "decimal@^0.0.2": |
| | | "integrity" "sha512-puX1+D5GlpXYH0kDejnu8F2jsGLKRePc7eOznNjqMbA2otl7AzvubrvvZVmOvRCHhsqeAPKNcAxHHbevsH/1qg==" |
| | | "resolved" "https://registry.npmmirror.com/decimal/-/decimal-0.0.2.tgz" |
| | | "version" "0.0.2" |
| | | decimal@^0.0.2: |
| | | version "0.0.2" |
| | | resolved "https://registry.npmmirror.com/decimal/-/decimal-0.0.2.tgz" |
| | | integrity sha512-puX1+D5GlpXYH0kDejnu8F2jsGLKRePc7eOznNjqMbA2otl7AzvubrvvZVmOvRCHhsqeAPKNcAxHHbevsH/1qg== |
| | | |
| | | "deep-equal@^1.0.0", "deep-equal@1.x": |
| | | "integrity" "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==" |
| | | "resolved" "https://registry.npmmirror.com/deep-equal/-/deep-equal-1.1.2.tgz" |
| | | "version" "1.1.2" |
| | | deep-equal@^1.0.0, deep-equal@1.x: |
| | | version "1.1.2" |
| | | resolved "https://registry.npmmirror.com/deep-equal/-/deep-equal-1.1.2.tgz" |
| | | integrity sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg== |
| | | dependencies: |
| | | is-arguments "^1.1.1" |
| | | is-date-object "^1.0.5" |