diff --git a/admin/package-lock.json b/admin/package-lock.json index e5a768cf..228c77e7 100644 --- a/admin/package-lock.json +++ b/admin/package-lock.json @@ -9,7 +9,7 @@ "version": "0.0.0", "license": "MIT", "dependencies": { - "@element-plus/icons-vue": "^2.0.6", + "@element-plus/icons-vue": "^2.3.1", "@highlightjs/vue-plugin": "^2.1.0", "@wangeditor/editor": "^5.1.12", "@wangeditor/editor-for-vue": "^5.1.12", @@ -17,6 +17,7 @@ "css-color-function": "^1.3.3", "echarts": "^5.3.3", "element-plus": "^2.2.9", + "flv.js": "^1.6.2", "highlight.js": "^11.6.0", "nprogress": "^0.2.0", "pinia": "^2.0.14", @@ -564,9 +565,12 @@ } }, "node_modules/@element-plus/icons-vue": { - "version": "2.0.6", - "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.0.6.tgz", - "integrity": "sha512-lPpG8hYkjL/Z97DH5Ei6w6o22Z4YdNglWCNYOPcB33JCF2A4wye6HFgSI7hEt9zdLyxlSpiqtgf9XcYU+m5mew==" + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz", + "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==", + "peerDependencies": { + "vue": "^3.2.0" + } }, "node_modules/@esbuild/linux-loong64": { "version": "0.14.53", @@ -2626,6 +2630,11 @@ "es6-symbol": "^3.1.1" } }, + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmmirror.com/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, "node_modules/es6-symbol": { "version": "3.1.3", "resolved": "https://registry.npmmirror.com/es6-symbol/-/es6-symbol-3.1.3.tgz", @@ -3615,6 +3624,15 @@ "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", "dev": true }, + "node_modules/flv.js": { + "version": "1.6.2", + "resolved": "https://registry.npmmirror.com/flv.js/-/flv.js-1.6.2.tgz", + "integrity": "sha512-xre4gUbX1MPtgQRKj2pxJENp/RnaHaxYvy3YToVVCrSmAWUu85b9mug6pTXF6zakUjNP2lFWZ1rkSX7gxhB/2A==", + "dependencies": { + "es6-promise": "^4.2.8", + "webworkify-webpack": "^2.1.5" + } + }, "node_modules/follow-redirects": { "version": "1.15.1", "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.1.tgz", @@ -7307,6 +7325,11 @@ "integrity": "sha512-h9atBP/bsZohWpHnr+2sic8Iecb60GxftXsWNLLLSqewgIsGzByd2gcIID4nXcG+3tNe4GQG3dLcff3kXupdRA==", "dev": true }, + "node_modules/webworkify-webpack": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/webworkify-webpack/-/webworkify-webpack-2.1.5.tgz", + "integrity": "sha512-2akF8FIyUvbiBBdD+RoHpoTbHMQF2HwjcxfDvgztAX5YwbZNyrtfUMgvfgFVsgDhDPVTlkbb5vyasqDHfIDPQw==" + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", @@ -7790,9 +7813,10 @@ "integrity": "sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==" }, "@element-plus/icons-vue": { - "version": "2.0.6", - "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.0.6.tgz", - "integrity": "sha512-lPpG8hYkjL/Z97DH5Ei6w6o22Z4YdNglWCNYOPcB33JCF2A4wye6HFgSI7hEt9zdLyxlSpiqtgf9XcYU+m5mew==" + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz", + "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==", + "requires": {} }, "@esbuild/linux-loong64": { "version": "0.14.53", @@ -9567,6 +9591,11 @@ "es6-symbol": "^3.1.1" } }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmmirror.com/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==" + }, "es6-symbol": { "version": "3.1.3", "resolved": "https://registry.npmmirror.com/es6-symbol/-/es6-symbol-3.1.3.tgz", @@ -10254,6 +10283,15 @@ "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", "dev": true }, + "flv.js": { + "version": "1.6.2", + "resolved": "https://registry.npmmirror.com/flv.js/-/flv.js-1.6.2.tgz", + "integrity": "sha512-xre4gUbX1MPtgQRKj2pxJENp/RnaHaxYvy3YToVVCrSmAWUu85b9mug6pTXF6zakUjNP2lFWZ1rkSX7gxhB/2A==", + "requires": { + "es6-promise": "^4.2.8", + "webworkify-webpack": "^2.1.5" + } + }, "follow-redirects": { "version": "1.15.1", "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.1.tgz", @@ -13253,6 +13291,11 @@ "integrity": "sha512-h9atBP/bsZohWpHnr+2sic8Iecb60GxftXsWNLLLSqewgIsGzByd2gcIID4nXcG+3tNe4GQG3dLcff3kXupdRA==", "dev": true }, + "webworkify-webpack": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/webworkify-webpack/-/webworkify-webpack-2.1.5.tgz", + "integrity": "sha512-2akF8FIyUvbiBBdD+RoHpoTbHMQF2HwjcxfDvgztAX5YwbZNyrtfUMgvfgFVsgDhDPVTlkbb5vyasqDHfIDPQw==" + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", diff --git a/admin/package.json b/admin/package.json index c6c68cf3..8b650313 100644 --- a/admin/package.json +++ b/admin/package.json @@ -10,7 +10,7 @@ "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore" }, "dependencies": { - "@element-plus/icons-vue": "^2.0.6", + "@element-plus/icons-vue": "^2.3.1", "@highlightjs/vue-plugin": "^2.1.0", "@wangeditor/editor": "^5.1.12", "@wangeditor/editor-for-vue": "^5.1.12", @@ -18,6 +18,7 @@ "css-color-function": "^1.3.3", "echarts": "^5.3.3", "element-plus": "^2.2.9", + "flv.js": "^1.6.2", "highlight.js": "^11.6.0", "nprogress": "^0.2.0", "pinia": "^2.0.14", diff --git a/admin/src/api/device.ts b/admin/src/api/device.ts index 69b6be39..d5ea49de 100644 --- a/admin/src/api/device.ts +++ b/admin/src/api/device.ts @@ -33,4 +33,9 @@ export function apiDeviceDelete(params: any) { // 监测设备详情 export function apiDeviceDetail(params: any) { return request.get({ url: '/device.device/detail', params }) +} + +// 设备监控数据 +export function apiDeviceMonitorData(params: any) { + return request.get({ url: '/device.device/monitorData', params }) } \ No newline at end of file diff --git a/admin/src/config/index.ts b/admin/src/config/index.ts index 10bbb3da..4bf4e940 100644 --- a/admin/src/config/index.ts +++ b/admin/src/config/index.ts @@ -2,8 +2,8 @@ const config = { terminal: 1, //终端 title: '后台管理系统', //网站默认标题 version: '1.6.0', //版本号 - baseUrl: `${import.meta.env.VITE_APP_BASE_URL || ''}/`, //请求接口域名 - // baseUrl: 'http://127.0.0.1:30005/', + // baseUrl: `${import.meta.env.VITE_APP_BASE_URL || ''}/`, //请求接口域名 + baseUrl: 'http://127.0.0.1:30005/', urlPrefix: 'adminapi', //请求默认前缀 timeout: 10 * 1000 //请求超时时长 } diff --git a/admin/src/views/device/detail.vue b/admin/src/views/device/detail.vue new file mode 100644 index 00000000..0d0159d5 --- /dev/null +++ b/admin/src/views/device/detail.vue @@ -0,0 +1,213 @@ + + + + + + + + + 设备资料 + + + + + 所属土地: + ID:{{ deviceData.device.land_id }} / 名称:{{ deviceData.device.land_title }} + + + 所属产品: + ID:{{ deviceData.device.product_id }} / 名称:{{ deviceData.device.land_title }} + + + + + 设备名称: + {{ deviceData.device.name }} + + + 设备编码: + {{ deviceData.device.code }} + + + 设备类型: + + + + + + 设备状态: + + + + + + 是否在线: + + + + + + 是否绑定产品: + + + + + + + + + + + + + + + {{ item.name }} + + 历史数据 + + + + {{ item.monitor_value }} + 只读{{ item.last_time }} + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/admin/src/views/device/edit.vue b/admin/src/views/device/edit.vue index fd652136..add3e7c6 100644 --- a/admin/src/views/device/edit.vue +++ b/admin/src/views/device/edit.vue @@ -70,6 +70,9 @@ :value="item.value" /> + + + @@ -136,6 +139,7 @@ const formData = reactive({ product_id: '', code: '', name: '', + video_url: '', type: '', monitor_item: '', status: '', @@ -171,11 +175,6 @@ const formRules = reactive({ message: '请选择设备类型', trigger: ['blur'] }], - monitor_item: [{ - required: true, - message: '请选择设备监测项', - trigger: ['blur'] - }], status: [{ required: true, message: '请选择设备状态', @@ -202,7 +201,6 @@ const setFormData = async (data: Record) => { formData[key] = data[key] } } - console.log(dictData.monitor_item) } interface ListItem { diff --git a/admin/src/views/device/index.vue b/admin/src/views/device/index.vue index 9225f8b4..e8819089 100644 --- a/admin/src/views/device/index.vue +++ b/admin/src/views/device/index.vue @@ -94,31 +94,31 @@ - + + + - ID: {{ row.land_id }} - 名称: {{ row.land_title }} + - + - ID: {{ row.product_id }} - 名称: {{ row.product_name }} + ID: {{ row.land_id }} + 名称: {{ row.land_title }} + + + + + ID: {{ row.product_id }} + 名称: {{ row.product_name }} - - - - - - @@ -139,7 +139,7 @@ {{ row.create_time ? timeFormat(row.create_time, 'yyyy-mm-dd hh:MM:ss') : '' }} - + 编辑 + + + 查看详情 + + - + - {{ row.title }} + {{ row.title }} diff --git a/admin/src/views/land_plant/index.vue b/admin/src/views/land_plant/index.vue index fb8f5673..4002324b 100644 --- a/admin/src/views/land_plant/index.vue +++ b/admin/src/views/land_plant/index.vue @@ -50,16 +50,16 @@ - + + - ID: {{ row.land_id }} - 名称: {{ row.title }} + ID: {{ row.land_id }} + 名称: {{ row.title }} diff --git a/admin/src/views/land_plant_action/index.vue b/admin/src/views/land_plant_action/index.vue index e4199763..06763e26 100644 --- a/admin/src/views/land_plant_action/index.vue +++ b/admin/src/views/land_plant_action/index.vue @@ -40,16 +40,16 @@ - + + - ID: {{ row.plant_id }} - 类型: {{ row.kind }} 品牌: {{ row.breed }} + ID: {{ row.plant_id }} + 类型: {{ row.kind }} 品牌: {{ row.breed }} diff --git a/admin/src/views/monitor_alarm/index.vue b/admin/src/views/monitor_alarm/index.vue index d821f9d2..56b82131 100644 --- a/admin/src/views/monitor_alarm/index.vue +++ b/admin/src/views/monitor_alarm/index.vue @@ -39,8 +39,8 @@ - ID: {{ row.device_id }} - 名称: {{ row.device.name }} + ID: {{ row.device_id }} + 名称: {{ row.device.name }} diff --git a/admin/src/views/product/index.vue b/admin/src/views/product/index.vue index ac5025fb..25a35699 100644 --- a/admin/src/views/product/index.vue +++ b/admin/src/views/product/index.vue @@ -60,20 +60,20 @@ - + + + + + ID: {{ row.land_id }} + 名称: {{ row.title }} + + @@ -84,7 +84,7 @@ {{ row.create_time ? timeFormat(row.create_time, 'yyyy-mm-dd hh:MM:ss') : '' }} - + 编辑 + + + 查看设备 + + import { usePaging } from '@/hooks/usePaging' +import { getRoutePath } from '@/router' import { useDictData } from '@/hooks/useDictOptions' import { apiProductLists, apiProductDelete } from '@/api/product' import { timeFormat } from '@/utils/util' diff --git a/admin/yarn.lock b/admin/yarn.lock index 9bbde146..52060a38 100644 --- a/admin/yarn.lock +++ b/admin/yarn.lock @@ -291,10 +291,10 @@ resolved "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz" integrity sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw== -"@element-plus/icons-vue@^2.0.6": - version "2.0.6" - resolved "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.0.6.tgz" - integrity sha512-lPpG8hYkjL/Z97DH5Ei6w6o22Z4YdNglWCNYOPcB33JCF2A4wye6HFgSI7hEt9zdLyxlSpiqtgf9XcYU+m5mew== +"@element-plus/icons-vue@^2.0.6", "@element-plus/icons-vue@^2.3.1": + version "2.3.1" + resolved "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz" + integrity sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg== "@eslint/eslintrc@^1.3.0": version "1.3.0" @@ -1794,6 +1794,11 @@ es6-iterator@^2.0.3: es5-ext "^0.10.35" es6-symbol "^3.1.1" +es6-promise@^4.2.8: + version "4.2.8" + resolved "https://registry.npmmirror.com/es6-promise/-/es6-promise-4.2.8.tgz" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + es6-symbol@^3.1.1, es6-symbol@^3.1.3: version "3.1.3" resolved "https://registry.npmmirror.com/es6-symbol/-/es6-symbol-3.1.3.tgz" @@ -2178,6 +2183,14 @@ flatted@^3.1.0: resolved "https://registry.npmmirror.com/flatted/-/flatted-3.2.6.tgz" integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== +flv.js@^1.6.2: + version "1.6.2" + resolved "https://registry.npmmirror.com/flv.js/-/flv.js-1.6.2.tgz" + integrity sha512-xre4gUbX1MPtgQRKj2pxJENp/RnaHaxYvy3YToVVCrSmAWUu85b9mug6pTXF6zakUjNP2lFWZ1rkSX7gxhB/2A== + dependencies: + es6-promise "^4.2.8" + webworkify-webpack "^2.1.5" + follow-redirects@^1.14.9: version "1.15.1" resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.1.tgz" @@ -4293,7 +4306,7 @@ vue-tsc@^0.38.1: dependencies: "@volar/vue-typescript" "0.38.9" -vue@^3.2.2, vue@^3.2.37: +vue@^3.2.0, vue@^3.2.2, vue@^3.2.37: version "3.2.37" resolved "https://registry.npmmirror.com/vue/-/vue-3.2.37.tgz" integrity sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ== @@ -4330,6 +4343,11 @@ webpack-virtual-modules@^0.4.4: resolved "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.4.4.tgz" integrity sha512-h9atBP/bsZohWpHnr+2sic8Iecb60GxftXsWNLLLSqewgIsGzByd2gcIID4nXcG+3tNe4GQG3dLcff3kXupdRA== +webworkify-webpack@^2.1.5: + version "2.1.5" + resolved "https://registry.npmmirror.com/webworkify-webpack/-/webworkify-webpack-2.1.5.tgz" + integrity sha512-2akF8FIyUvbiBBdD+RoHpoTbHMQF2HwjcxfDvgztAX5YwbZNyrtfUMgvfgFVsgDhDPVTlkbb5vyasqDHfIDPQw== + which@^2.0.1: version "2.0.2" resolved "https://registry.npmmirror.com/which/-/which-2.0.2.tgz" diff --git a/app/adminapi/controller/device/DeviceController.php b/app/adminapi/controller/device/DeviceController.php index d66db9e1..0df9d7f0 100644 --- a/app/adminapi/controller/device/DeviceController.php +++ b/app/adminapi/controller/device/DeviceController.php @@ -104,5 +104,17 @@ class DeviceController extends BaseAdminController return $this->data($result); } + /** + * @notes 获取详情 + * @return \think\response\Json + * @author likeadmin + * @date 2023/11/24 15:30 + */ + public function monitorData() + { + $params = (new DeviceValidate())->goCheck('monitorData'); + $result = DeviceLogic::monitorData($params); + return $this->data($result); + } } \ No newline at end of file diff --git a/app/adminapi/logic/device/DeviceLogic.php b/app/adminapi/logic/device/DeviceLogic.php index 304f46ed..09a4bdd8 100644 --- a/app/adminapi/logic/device/DeviceLogic.php +++ b/app/adminapi/logic/device/DeviceLogic.php @@ -17,9 +17,9 @@ namespace app\adminapi\logic\device; use app\common\model\device\Device; use app\common\logic\BaseLogic; +use think\facade\Config; use think\facade\Db; - /** * Device逻辑 * Class DeviceLogic @@ -51,6 +51,7 @@ class DeviceLogic extends BaseLogic 'name' => $params['name'], 'type' => $params['type'], 'monitor_item' => $params['monitor_item'], + 'video_url' => $params['video_url'], 'status' => $params['status'], 'is_online' => $params['is_online'], 'is_bind' => $params['is_bind'], @@ -94,6 +95,7 @@ class DeviceLogic extends BaseLogic 'name' => $params['name'], 'type' => $params['type'], 'monitor_item' => $params['monitor_item'], + 'video_url' => $params['video_url'], 'status' => $params['status'], 'is_online' => $params['is_online'], 'is_bind' => $params['is_bind'], @@ -125,6 +127,9 @@ class DeviceLogic extends BaseLogic */ public static function delete(array $params): bool { + Db::name('product_device')->where('device_id', $params['id'])->delete(); + Db::name('device_monitor_data')->where('device_id', $params['id'])->delete(); + Db::name('monitor_alarm')->where('device_id', $params['id'])->delete(); return Device::destroy($params['id']); } @@ -138,6 +143,54 @@ class DeviceLogic extends BaseLogic */ public static function detail($params): array { - return Device::findOrEmpty($params['id'])->toArray(); + $detail = Db::name('device')->alias('d') + ->where('d.id', $params['id']) + ->leftJoin('user u','u.id = d.user_id') + ->leftJoin('product_device pd','pd.device_id = d.id') + ->leftJoin('product p','p.id = pd.product_id') + ->leftJoin('land_product lp','lp.product_id = pd.product_id') + ->leftJoin('land l','l.id = lp.land_id') + ->field('d.*, u.account, pd.product_id, p.name as product_name, lp.land_id, l.title as land_title') + ->findOrEmpty(); + + $monitorItemArray = []; + if (!empty($detail['monitor_item'])) { + $monitorItemArray = explode(',', $detail['monitor_item']); + } + $dictTypeId = Db::name('dict_type')->where('type', 'monitor_item')->value('id'); + $monitorItemArray = Db::name('dict_data')->where('type_id', $dictTypeId)->whereIn('value', $monitorItemArray)->field(['name', 'value'])->select()->toArray(); + foreach($monitorItemArray as $k=>$v) { + $monitorItemArray[$k]['device_id'] = $params['id']; + $monitorItemArray[$k]['monitor_value'] = '-'; + $monitorItemArray[$k]['last_time'] = '-'; + $monitorData = Db::name('device_monitor_data')->where('device_id', $params['id'])->where('monitor_item', $v['value'])->order(['id' => 'desc'])->find(); + if (!empty($monitorData)) { + $monitorItemArray[$k]['monitor_value'] = $monitorData['monitor_value']; + $monitorItemArray[$k]['last_time'] = date('Y-m-d H:i:s', $monitorData['create_time']); + } + } + $detail['monitor_item'] = $monitorItemArray; + return $detail; + } + + public static function monitorData($params): array + { + $pageSizeMax = Config::get('project.lists.page_size_max'); + $pageSize = Config::get('project.lists.page_size'); + $pageNo = $page_no = request()->get('page_no', 1) ?: 1; + $pageSize = $page_size = request()->get('page_size', $pageSize) ?: $pageSize; + + $limitOffset = ($pageNo - 1) * $pageSize; + $limitLength = $pageSize; + $where['device_id'] = $params['id']; + $where['monitor_item'] = $params['monitor_type']; + $lists = Db::name('device_monitor_data') + ->where($where) + ->limit($limitOffset, $limitLength) + ->order(['id' => 'desc']) + ->select() + ->toArray(); + $count = Db::name('device_monitor_data')->where($where)->count(); + return compact('lists', 'count', 'page_no', 'page_size'); } } \ No newline at end of file diff --git a/app/adminapi/logic/land/LandPlantLogic.php b/app/adminapi/logic/land/LandPlantLogic.php index e76299a7..9a7debcd 100644 --- a/app/adminapi/logic/land/LandPlantLogic.php +++ b/app/adminapi/logic/land/LandPlantLogic.php @@ -108,6 +108,7 @@ class LandPlantLogic extends BaseLogic */ public static function delete(array $params): bool { + Db::name('land_plant_action')->where('plant_id', $params['id'])->delete(); return LandPlant::destroy($params['id']); } diff --git a/app/adminapi/logic/land/ProductLogic.php b/app/adminapi/logic/land/ProductLogic.php index 8e7df0c7..c2de4658 100644 --- a/app/adminapi/logic/land/ProductLogic.php +++ b/app/adminapi/logic/land/ProductLogic.php @@ -106,6 +106,7 @@ class ProductLogic extends BaseLogic public static function delete(array $params): bool { Db::name('land_product')->where('product_id', $params['id'])->delete(); + Db::name('monitor_data')->where('product_id', $params['id'])->delete(); return Product::destroy($params['id']); } diff --git a/app/adminapi/validate/device/DeviceValidate.php b/app/adminapi/validate/device/DeviceValidate.php index f200577e..1bd92912 100644 --- a/app/adminapi/validate/device/DeviceValidate.php +++ b/app/adminapi/validate/device/DeviceValidate.php @@ -35,6 +35,7 @@ class DeviceValidate extends BaseValidate 'code' => 'require', 'name' => 'require', 'type' => 'require', + 'monitor_type' => 'require', 'status' => 'require', 'is_online' => 'require', 'is_bind' => 'require', @@ -103,4 +104,15 @@ class DeviceValidate extends BaseValidate return $this->only(['id']); } + /** + * @notes 详情场景 + * @return DeviceValidate + * @author likeadmin + * @date 2023/11/24 15:30 + */ + public function sceneMonitorData() + { + return $this->only(['id', 'monitor_type']); + } + } \ No newline at end of file