diff --git a/apps/web-antd/src/api/property/assetManage/procurementApplication/index.ts b/apps/web-antd/src/api/property/assetManage/procurementApplication/index.ts index e51c1110..22f8ab8b 100644 --- a/apps/web-antd/src/api/property/assetManage/procurementApplication/index.ts +++ b/apps/web-antd/src/api/property/assetManage/procurementApplication/index.ts @@ -19,7 +19,7 @@ export function procurementApplicationList( params?: ProcurementApplicationQuery, ) { return requestClient.get>( - '/domain/procurementApplication/list', + '/property/capitalApplication/list', { params }, ); } @@ -32,7 +32,7 @@ export function procurementApplicationList( export function procurementApplicationExport( params?: ProcurementApplicationQuery, ) { - return commonExport('/domain/procurementApplication/export', params ?? {}); + return commonExport('/property/capitalApplication/export', params ?? {}); } /** @@ -42,7 +42,7 @@ export function procurementApplicationExport( */ export function procurementApplicationInfo(id: ID) { return requestClient.get( - `/domain/procurementApplication/${id}`, + `/property/capitalApplication/${id}`, ); } @@ -52,10 +52,7 @@ export function procurementApplicationInfo(id: ID) { * @returns void */ export function procurementApplicationAdd(data: ProcurementApplicationForm) { - return requestClient.postWithMsg( - '/domain/procurementApplication', - data, - ); + return requestClient.postWithMsg('/property/capitalApplication', data); } /** @@ -64,7 +61,7 @@ export function procurementApplicationAdd(data: ProcurementApplicationForm) { * @returns void */ export function procurementApplicationUpdate(data: ProcurementApplicationForm) { - return requestClient.putWithMsg('/domain/procurementApplication', data); + return requestClient.putWithMsg('/property/capitalApplication', data); } /** @@ -74,6 +71,6 @@ export function procurementApplicationUpdate(data: ProcurementApplicationForm) { */ export function procurementApplicationRemove(id: ID | IDS) { return requestClient.deleteWithMsg( - `/domain/procurementApplication/${id}`, + `/property/capitalApplication/${id}`, ); } diff --git a/apps/web-antd/src/api/property/assetManage/procurementApplication/model.d.ts b/apps/web-antd/src/api/property/assetManage/procurementApplication/model.d.ts index d2484328..f33f9a38 100644 --- a/apps/web-antd/src/api/property/assetManage/procurementApplication/model.d.ts +++ b/apps/web-antd/src/api/property/assetManage/procurementApplication/model.d.ts @@ -51,6 +51,11 @@ export interface ProcurementApplicationVO { */ state: string; + /** + * 审核意见 + */ + auditOpinion?: string; + /** * 备注 */ @@ -65,6 +70,11 @@ export interface ProcurementApplicationVO { * 搜索值 */ searchValue: string; + + /** + * 资产信息 + */ + capitalInfoVoList: any[]; } export interface ProcurementApplicationForm extends BaseEntity { @@ -118,6 +128,11 @@ export interface ProcurementApplicationForm extends BaseEntity { */ state?: string; + /** + * 审核意见 + */ + auditOpinion?: string; + /** * 备注 */ @@ -132,6 +147,7 @@ export interface ProcurementApplicationForm extends BaseEntity { * 搜索值 */ searchValue?: string; + capitalInfoBolist?: any; } export interface ProcurementApplicationQuery extends PageQuery { diff --git a/apps/web-antd/src/assets/algorithmManagement/image.png b/apps/web-antd/src/assets/algorithmManagement/image.png new file mode 100644 index 00000000..d99585cf Binary files /dev/null and b/apps/web-antd/src/assets/algorithmManagement/image.png differ diff --git a/apps/web-antd/src/assets/algorithmManagement/image2.png b/apps/web-antd/src/assets/algorithmManagement/image2.png new file mode 100644 index 00000000..1a138912 Binary files /dev/null and b/apps/web-antd/src/assets/algorithmManagement/image2.png differ diff --git a/apps/web-antd/src/assets/algorithmManagement/image3.png b/apps/web-antd/src/assets/algorithmManagement/image3.png new file mode 100644 index 00000000..8411352f Binary files /dev/null and b/apps/web-antd/src/assets/algorithmManagement/image3.png differ diff --git a/apps/web-antd/src/assets/algorithmManagement/image4.png b/apps/web-antd/src/assets/algorithmManagement/image4.png new file mode 100644 index 00000000..b82f33d0 Binary files /dev/null and b/apps/web-antd/src/assets/algorithmManagement/image4.png differ diff --git a/apps/web-antd/src/assets/algorithmManagement/image5.png b/apps/web-antd/src/assets/algorithmManagement/image5.png new file mode 100644 index 00000000..0e678492 Binary files /dev/null and b/apps/web-antd/src/assets/algorithmManagement/image5.png differ diff --git a/apps/web-antd/src/assets/algorithmManagement/image6.png b/apps/web-antd/src/assets/algorithmManagement/image6.png new file mode 100644 index 00000000..2893a792 Binary files /dev/null and b/apps/web-antd/src/assets/algorithmManagement/image6.png differ diff --git a/apps/web-antd/src/assets/algorithmManagement/image7.png b/apps/web-antd/src/assets/algorithmManagement/image7.png new file mode 100644 index 00000000..1bf850b3 Binary files /dev/null and b/apps/web-antd/src/assets/algorithmManagement/image7.png differ diff --git a/apps/web-antd/src/router/routes/local.ts b/apps/web-antd/src/router/routes/local.ts index 9beca3c2..19f8f606 100644 --- a/apps/web-antd/src/router/routes/local.ts +++ b/apps/web-antd/src/router/routes/local.ts @@ -38,15 +38,15 @@ export const localMenuList: RouteRecordStringComponent[] = [ title: '首页', }, }, - { - component: '/_core/about/index', - meta: { - icon: 'lucide:copyright', - order: 9999, - title: $t('demos.vben.about'), - }, - name: 'About', - path: '/vben-admin/about', - }, + // { + // component: '/_core/about/index', + // meta: { + // icon: 'lucide:copyright', + // order: 9999, + // title: $t('demos.vben.about'), + // }, + // name: 'About', + // path: '/vben-admin/about', + // }, ...localRoutes, ]; diff --git a/apps/web-antd/src/views/property/assetManage/procurementApplication/audit-modal.vue b/apps/web-antd/src/views/property/assetManage/procurementApplication/audit-modal.vue new file mode 100644 index 00000000..cf8530b3 --- /dev/null +++ b/apps/web-antd/src/views/property/assetManage/procurementApplication/audit-modal.vue @@ -0,0 +1,132 @@ + + + diff --git a/apps/web-antd/src/views/property/assetManage/procurementApplication/data.ts b/apps/web-antd/src/views/property/assetManage/procurementApplication/data.ts index ca200787..8239e602 100644 --- a/apps/web-antd/src/views/property/assetManage/procurementApplication/data.ts +++ b/apps/web-antd/src/views/property/assetManage/procurementApplication/data.ts @@ -3,48 +3,46 @@ import type { VxeGridProps } from '#/adapter/vxe-table'; import { getDictOptions } from '#/utils/dict'; import { renderDict } from '#/utils/render'; +import { suppliersList } from '#/api/property/assetManage/suppliers'; +import { depotList } from '#/api/property/assetManage/depot'; +import { useUserStore } from '@vben/stores'; + +const userStore = useUserStore(); export const querySchema: FormSchemaGetter = () => [ - { - component: 'Input', - fieldName: 'title', - label: '标题', - }, + // { + // component: 'Input', + // fieldName: 'title', + // label: '标题', + // }, { component: 'Input', fieldName: 'applicat', - label: '申请人id', - }, - { - component: 'Input', - fieldName: 'phone', - label: '申请人手机号', - }, - { - component: 'Input', - fieldName: 'supplier', - label: '供应商id', - }, - { - component: 'Input', - fieldName: 'capitalId', - label: '资产id', + label: '申请人', }, + // { + // component: 'Input', + // fieldName: 'phone', + // label: '申请人手机号', + // }, + // { + // component: 'ApiSelect', + // fieldName: 'supplier', + // label: '供应商', + // componentProps: { + // api: suppliersList({ pageNum: 1, pageSize: 1000 }), + // resultField: 'rows', + // labelField: 'assetTypeName', + // valueField: 'id', + // }, + // }, + { component: 'Select', componentProps: {}, fieldName: 'buyType', label: '采购方式', - }, - { - component: 'Input', - fieldName: 'buyUnitPrice', - label: '采购单价', - }, - { - component: 'Input', - fieldName: 'buyAmount', - label: '采购金额', + options: getDictOptions('wy_zccgfs'), }, { component: 'Select', @@ -55,21 +53,6 @@ export const querySchema: FormSchemaGetter = () => [ fieldName: 'state', label: '状态', }, - { - component: 'DatePicker', - componentProps: { - showTime: true, - format: 'YYYY-MM-DD HH:mm:ss', - valueFormat: 'YYYY-MM-DD HH:mm:ss', - }, - fieldName: 'applicationTime', - label: '申请时间', - }, - { - component: 'Input', - fieldName: 'searchValue', - label: '搜索值', - }, ]; // 需要使用i18n注意这里要改成getter形式 否则切换语言不会刷新 @@ -77,12 +60,18 @@ export const querySchema: FormSchemaGetter = () => [ export const columns: VxeGridProps['columns'] = [ { type: 'checkbox', width: 60 }, { - title: '', + title: '序号', field: 'id', + slots: { + default: ({ rowIndex }) => { + return (rowIndex + 1).toString(); + }, + }, }, { title: '标题', field: 'title', + width: 'auto', }, { title: '申请人id', @@ -96,21 +85,15 @@ export const columns: VxeGridProps['columns'] = [ title: '供应商id', field: 'supplier', }, - { - title: '资产id', - field: 'capitalId', - }, { title: '采购方式', field: 'buyType', - }, - { - title: '采购单价', - field: 'buyUnitPrice', - }, - { - title: '采购金额', - field: 'buyAmount', + slots: { + default: ({ row }) => { + // 可选从DictEnum中获取 DictEnum.WY_ZCSQSHZT 便于维护 + return renderDict(row.buyType, 'wy_zccgfs'); + }, + }, }, { title: '状态', @@ -126,20 +109,12 @@ export const columns: VxeGridProps['columns'] = [ title: '备注', field: 'remark', }, - { - title: '申请时间', - field: 'applicationTime', - }, - { - title: '搜索值', - field: 'searchValue', - }, { field: 'action', fixed: 'right', slots: { default: 'action' }, title: '操作', - width: 180, + width: 280, }, ]; @@ -160,73 +135,131 @@ export const modalSchema: FormSchemaGetter = () => [ rules: 'required', }, { - label: '申请人id', - fieldName: 'applicat', - component: 'Input', + label: '存放仓库', + fieldName: 'depotId', + component: 'ApiSelect', rules: 'required', - }, - { - label: '申请人手机号', - fieldName: 'phone', - component: 'Input', - rules: 'required', - }, - { - label: '供应商id', - fieldName: 'supplier', - component: 'Input', - rules: 'required', - }, - { - label: '资产id', - fieldName: 'capitalId', - component: 'Input', - rules: 'required', - }, - { - label: '采购方式', - fieldName: 'buyType', - component: 'Select', - componentProps: {}, - rules: 'selectRequired', - }, - { - label: '采购单价', - fieldName: 'buyUnitPrice', - component: 'Input', - }, - { - label: '采购金额', - fieldName: 'buyAmount', - component: 'Input', - }, - { - label: '状态', - fieldName: 'state', - component: 'Select', componentProps: { - // 可选从DictEnum中获取 DictEnum.WY_ZCSQSHZT 便于维护 - options: getDictOptions('wy_zcsqshzt'), + api: async () => { + const res = await depotList({ pageNum: 1, pageSize: 1000 }); + return res; + }, + resultField: 'rows', + labelField: 'depotName', + valueField: 'id', }, }, + { + component: 'Input', + fieldName: 'applicatDisplay', // 显示用 + label: '申请人', + rules: 'required', + disabled: true, + }, + { + component: 'Input', + rules: 'required', + fieldName: 'applicat', // 实际存储ID + dependencies: { + show: () => false, + triggerFields: [''], + }, + }, + { + component: 'Input', + fieldName: 'phone', + rules: 'required', + label: '申请人手机号', + }, + { + component: 'ApiSelect', + rules: 'required', + fieldName: 'supplier', + label: '供应商', + componentProps: { + api: async () => { + const res = await suppliersList({ pageNum: 1, pageSize: 1000 }); + return res; + }, + resultField: 'rows', + labelField: 'suppliersName', + valueField: 'id', + }, + }, + { + rules: 'required', + component: 'Select', + componentProps: { + options: getDictOptions('wy_zccgfs'), + }, + fieldName: 'buyType', + label: '采购方式', + }, + // { + // label: '采购单价', + // fieldName: 'buyUnitPrice', + // component: 'Input', + // }, + // { + // label: '采购金额', + // fieldName: 'buyAmount', + // component: 'Input', + // }, + // { + // label: '状态', + // fieldName: 'state', + // component: 'Select', + // componentProps: { + // // 可选从DictEnum中获取 DictEnum.WY_ZCSQSHZT 便于维护 + // options: getDictOptions('wy_zcsqshzt'), + // }, + // }, { label: '备注', fieldName: 'remark', component: 'Input', }, +]; + +export const detailColumns: VxeGridProps['columns'] = [ { - label: '申请时间', - fieldName: 'applicationTime', - component: 'DatePicker', - componentProps: { - showTime: true, - format: 'YYYY-MM-DD HH:mm:ss', - valueFormat: 'YYYY-MM-DD HH:mm:ss', + title: '序号', + field: 'id', + width: 80, + slots: { + default: ({ rowIndex }) => { + return (rowIndex + 1).toString(); + }, }, }, { - label: '搜索值', - fieldName: 'searchValue', - component: 'Input', + title: '资产名称', + field: 'capitalName', + width: 150, + }, + { + title: '规格', + field: 'spec', + width: 120, + }, + { + title: '购买数量', + field: 'buyQuantity', + width: 120, + }, + { + title: '采购单价', + field: 'buyUnitPrice', + width: 120, + }, + { + title: '金额小计', + field: 'buyAmount', + width: 120, + }, + { + title: '备注', + field: 'remark', + width: 150, }, ]; diff --git a/apps/web-antd/src/views/property/assetManage/procurementApplication/index.vue b/apps/web-antd/src/views/property/assetManage/procurementApplication/index.vue index 7a25d660..62d25e5b 100644 --- a/apps/web-antd/src/views/property/assetManage/procurementApplication/index.vue +++ b/apps/web-antd/src/views/property/assetManage/procurementApplication/index.vue @@ -24,6 +24,7 @@ import type { ProcurementApplicationForm } from '#/api/property/assetManage/proc import { commonDownloadExcel } from '#/utils/file/download'; import procurementApplicationModal from './procurementApplication-modal.vue'; +import auditModal from './audit-modal.vue'; import { columns, querySchema } from './data'; const formOptions: VbenFormProps = { @@ -88,12 +89,29 @@ const [ProcurementApplicationModal, modalApi] = useVbenModal({ connectedComponent: procurementApplicationModal, }); +const [AuditModal, auditModalApi] = useVbenModal({ + connectedComponent: auditModal, +}); + function handleAdd() { modalApi.setData({}); modalApi.open(); } -async function handleEdit(row: Required) { +async function handleAudit(row: Required) { + // 检查审核状态,如果已审核则不允许再次审核 + if (row.state === '1' || row.state === '2') { + Modal.warning({ + title: '提示', + content: '该申请已审核,不能重复审核', + }); + return; + } + auditModalApi.setData({ id: row.id }); + auditModalApi.open(); +} + +async function handleDetail(row: Required) { modalApi.setData({ id: row.id }); modalApi.open(); } @@ -140,6 +158,13 @@ function handleDownloadExcel() { > {{ $t('pages.common.export') }} + + 新增 + {{ $t('pages.common.delete') }} - - {{ $t('pages.common.add') }} - + + diff --git a/apps/web-antd/src/views/property/assetManage/procurementApplication/procurement-detail-modal.vue b/apps/web-antd/src/views/property/assetManage/procurementApplication/procurement-detail-modal.vue new file mode 100644 index 00000000..1729a7dd --- /dev/null +++ b/apps/web-antd/src/views/property/assetManage/procurementApplication/procurement-detail-modal.vue @@ -0,0 +1,200 @@ + + + + diff --git a/apps/web-antd/src/views/property/assetManage/procurementApplication/procurementApplication-modal.vue b/apps/web-antd/src/views/property/assetManage/procurementApplication/procurementApplication-modal.vue index ef0877e0..58bca9c9 100644 --- a/apps/web-antd/src/views/property/assetManage/procurementApplication/procurementApplication-modal.vue +++ b/apps/web-antd/src/views/property/assetManage/procurementApplication/procurementApplication-modal.vue @@ -1,36 +1,44 @@ diff --git a/apps/web-antd/src/views/videoSystem/deviceManagement/components/machine-type-tree.vue b/apps/web-antd/src/views/videoSystem/deviceManagement/components/machine-type-tree.vue new file mode 100644 index 00000000..3d27df8a --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/deviceManagement/components/machine-type-tree.vue @@ -0,0 +1,121 @@ + + + diff --git a/apps/web-antd/src/views/videoSystem/deviceManagement/deviceList/data.ts b/apps/web-antd/src/views/videoSystem/deviceManagement/deviceList/data.ts new file mode 100644 index 00000000..e2c2e63e --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/deviceManagement/deviceList/data.ts @@ -0,0 +1,216 @@ +import type { FormSchemaGetter } from '#/adapter/form'; +import type { VxeGridProps } from '#/adapter/vxe-table'; +import { getDictOptions } from '#/utils/dict'; +import { renderDict } from '#/utils/render'; + +export const querySchema: FormSchemaGetter = () => [ + { + component: 'Input', + fieldName: 'machineName', + label: '设备名称', + }, + { + component: 'Input', + fieldName: 'machineCode', + label: '设备编码', + }, + { + component: 'Select', + componentProps: { + options: getDictOptions('wy_sbsyzt'), + }, + fieldName: 'state', + label: '使用状态', + }, +]; + +export const columns: VxeGridProps['columns'] = [ + { type: 'checkbox', width: 60 }, + { + title: '设备名称', + field: 'machineName', + minWidth: 180, + }, + { + title: '设备编码', + field: 'machineCode', + width: 100, + }, + { + title: '设备品牌', + field: 'machineBrand', + width: 100, + }, + // { + // title: '设备类型', + // field: 'machineTypeId', + // width:100 + // }, + // { + // title: '位置详情', + // field: 'locationId', + // width:100 + // }, + { + title: '采购价格', + field: 'purchasePrice', + width: 100, + }, + { + title: '启用时间', + field: 'activationTime', + width: 100, + }, + { + title: '保修截至时间', + field: 'deadline', + width: 100, + }, + { + title: '使用年限', + field: 'serviceLife', + width: 100, + }, + { + title: '保修周期', + field: 'maintenanceCycle', + width: 100, + slots: { + default: ({ row }) => { + return renderDict(row.maintenanceCycle, 'wy_sbbxzq'); + }, + }, + }, + { + title: '使用状态', + field: 'state', + width: 100, + slots: { + default: ({ row }) => { + return renderDict(row.state, 'wy_sbsyzt'); + }, + }, + }, + // { + // title: '责任人', + // field: 'personId', + // width:100 + // }, + { + field: 'action', + fixed: 'right', + slots: { default: 'action' }, + title: '操作', + width: 180, + }, +]; + +export const modalSchema: FormSchemaGetter = () => [ + { + label: '主键', + fieldName: 'id', + component: 'Input', + dependencies: { + show: () => false, + triggerFields: [''], + }, + }, + { + label: '设备名称', + fieldName: 'machineName', + component: 'Input', + rules: 'required', + formItemClass: 'col-span-2', + }, + { + label: '设备编码', + fieldName: 'machineCode', + component: 'Input', + rules: 'required', + }, + { + label: '设备品牌', + fieldName: 'machineBrand', + component: 'Input', + rules: 'required', + }, + { + label: '设备类型', + fieldName: 'machineTypeId', + component: 'TreeSelect', + rules: 'selectRequired', + formItemClass: 'col-span-2', + }, + { + label: '位置详情', + fieldName: 'locationId', + component: 'ApiSelect', + rules: 'selectRequired', + formItemClass: 'col-span-2', + }, + { + label: '采购价格', + fieldName: 'purchasePrice', + component: 'InputNumber', + componentProps: { + min: 0, + precision: 2, + }, + rules: 'required', + }, + { + label: '启用时间', + fieldName: 'activationTime', + component: 'DatePicker', + componentProps: { + format: 'YYYY-MM-DD', + valueFormat: 'YYYY-MM-DD', + }, + rules: 'required', + }, + { + label: '保修截至时间', + fieldName: 'deadline', + component: 'DatePicker', + componentProps: { + format: 'YYYY-MM-DD', + valueFormat: 'YYYY-MM-DD', + }, + rules: 'required', + }, + { + label: '使用年限', + fieldName: 'serviceLife', + component: 'InputNumber', + componentProps: { + min: 1, + precision: 0, + }, + rules: 'required', + }, + { + label: '保修周期', + fieldName: 'maintenanceCycle', + component: 'Select', + componentProps: { + options: getDictOptions('wy_sbbxzq'), + }, + rules: 'selectRequired', + }, + { + label: '使用状态', + fieldName: 'state', + component: 'Select', + componentProps: { + options: getDictOptions('wy_sbsyzt'), + }, + rules: 'selectRequired', + }, + { + label: '责任人', + fieldName: 'personId', + component: 'ApiSelect', + rules: 'selectRequired', + formItemClass: 'col-span-2', + }, +]; diff --git a/apps/web-antd/src/views/videoSystem/deviceManagement/deviceList/index.vue b/apps/web-antd/src/views/videoSystem/deviceManagement/deviceList/index.vue new file mode 100644 index 00000000..8aabf056 --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/deviceManagement/deviceList/index.vue @@ -0,0 +1,214 @@ + + + diff --git a/apps/web-antd/src/views/videoSystem/deviceManagement/deviceList/machine-detail.vue b/apps/web-antd/src/views/videoSystem/deviceManagement/deviceList/machine-detail.vue new file mode 100644 index 00000000..3b06244a --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/deviceManagement/deviceList/machine-detail.vue @@ -0,0 +1,94 @@ + + + diff --git a/apps/web-antd/src/views/videoSystem/deviceManagement/deviceList/machine-modal.vue b/apps/web-antd/src/views/videoSystem/deviceManagement/deviceList/machine-modal.vue new file mode 100644 index 00000000..13cdef7d --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/deviceManagement/deviceList/machine-modal.vue @@ -0,0 +1,201 @@ + + + diff --git a/apps/web-antd/src/views/videoSystem/deviceManagement/deviceLocation/data.ts b/apps/web-antd/src/views/videoSystem/deviceManagement/deviceLocation/data.ts new file mode 100644 index 00000000..6b03087f --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/deviceManagement/deviceLocation/data.ts @@ -0,0 +1,94 @@ +import type { FormSchemaGetter } from '#/adapter/form'; +import type { VxeGridProps } from '#/adapter/vxe-table'; +import { getDictOptions } from '#/utils/dict'; +import { renderDict } from '#/utils/render'; + +export const querySchema: FormSchemaGetter = () => [ + { + component: 'Input', + fieldName: 'locationName', + label: '位置名称', + }, + { + component: 'Select', + componentProps: { + options: getDictOptions('pro_location_type'), + }, + fieldName: 'locationType', + label: '位置类型', + }, +]; + +// 需要使用i18n注意这里要改成getter形式 否则切换语言不会刷新 +// export const columns: () => VxeGridProps['columns'] = () => [ +export const columns: VxeGridProps['columns'] = [ + { type: 'checkbox', width: 60 }, + { + title: '位置编码', + field: 'locationCode', + }, + { + title: '位置名称', + field: 'locationName', + }, + + { + title: '位置类型', + field: 'locationType', + slots: { + default: ({ row }) => { + return renderDict(row.locationType, 'pro_location_type'); + }, + }, + }, + { + title: '备注', + field: 'remark', + }, + { + field: 'action', + fixed: 'right', + slots: { default: 'action' }, + title: '操作', + width: 180, + }, +]; + +// export const modalSchema: FormSchemaGetter = () => [ +// { +// label: '主键', +// fieldName: 'id', +// component: 'Input', +// dependencies: { +// show: () => false, +// triggerFields: [''], +// }, +// }, +// { +// label: '位置名称', +// fieldName: 'locationName', +// component: 'Input', +// rules: 'required', +// }, +// { +// label: '位置类型', +// fieldName: 'locationType', +// component: 'Select', +// componentProps: { +// options: getDictOptions('pro_location_type'), +// }, +// rules: 'selectRequired', +// }, +// { +// component: 'TreeSelect', +// fieldName: 'locationObject', +// defaultValue: undefined, +// label: '位置对象', +// rules: 'selectRequired', +// }, +// { +// label: '备注', +// fieldName: 'remark', +// component: 'Textarea', +// }, +// ]; diff --git a/apps/web-antd/src/views/videoSystem/deviceManagement/deviceLocation/deviceLocation-detail.vue b/apps/web-antd/src/views/videoSystem/deviceManagement/deviceLocation/deviceLocation-detail.vue new file mode 100644 index 00000000..34c8035d --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/deviceManagement/deviceLocation/deviceLocation-detail.vue @@ -0,0 +1,68 @@ + + + diff --git a/apps/web-antd/src/views/videoSystem/deviceManagement/deviceLocation/deviceLocation-modal.vue b/apps/web-antd/src/views/videoSystem/deviceManagement/deviceLocation/deviceLocation-modal.vue new file mode 100644 index 00000000..cbcd7498 --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/deviceManagement/deviceLocation/deviceLocation-modal.vue @@ -0,0 +1,186 @@ + + + diff --git a/apps/web-antd/src/views/videoSystem/deviceManagement/deviceLocation/index.vue b/apps/web-antd/src/views/videoSystem/deviceManagement/deviceLocation/index.vue new file mode 100644 index 00000000..5640999e --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/deviceManagement/deviceLocation/index.vue @@ -0,0 +1,163 @@ + + + diff --git a/apps/web-antd/src/views/videoSystem/deviceManagement/deviceType/data.ts b/apps/web-antd/src/views/videoSystem/deviceManagement/deviceType/data.ts new file mode 100644 index 00000000..f0cdb36a --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/deviceManagement/deviceType/data.ts @@ -0,0 +1,125 @@ +import type { FormSchemaGetter } from '#/adapter/form'; +import type { VxeGridProps } from '#/adapter/vxe-table'; + +import { getDictOptions } from '#/utils/dict'; +import { renderDict } from '#/utils/render'; + +export const querySchema: FormSchemaGetter = () => [ + { + component: 'Input', + fieldName: 'machineTypeName', + label: '类型名称', + labelWidth: 100, + }, + { + component: 'Input', + fieldName: 'machineTypeCode', + label: '类型编号', + labelWidth: 100, + }, + { + component: 'Select', + componentProps: { + // 可选从DictEnum中获取 DictEnum.WY_KG 便于维护 + options: getDictOptions('wy_kg'), + }, + fieldName: 'isEnable', + label: '是否启用', + labelWidth: 100, + }, +]; + +// 需要使用i18n注意这里要改成getter形式 否则切换语言不会刷新 +// export const columns: () => VxeGridProps['columns'] = () => [ +export const columns: VxeGridProps['columns'] = [ + { type: 'checkbox', width: 60 }, + { + title: '序号', + field: 'id', + width: 60, + slots: { + default: ({ rowIndex }) => { + return (rowIndex + 1).toString(); + }, + }, + }, + { + title: '类型名称', + field: 'machineTypeName', + minWidth: 180, + }, + { + title: '类型编号', + field: 'machineTypeCode', + minWidth: 180, + }, + { + title: '是否启用', + field: 'isEnable', + slots: { + default: ({ row }) => { + // 可选从DictEnum中获取 DictEnum.WY_KG 便于维护 + return renderDict(row.isEnable, 'wy_kg'); + }, + }, + }, + { + title: '备注', + field: 'remark', + }, + { + field: 'action', + fixed: 'right', + slots: { default: 'action' }, + title: '操作', + width: 180, + }, +]; + +export const modalSchema: FormSchemaGetter = () => [ + { + label: '主键', + fieldName: 'id', + component: 'Input', + dependencies: { + show: () => false, + triggerFields: [''], + }, + }, + { + label: '类型名称', + fieldName: 'machineTypeName', + component: 'Input', + rules: 'required', + labelWidth: 100, + }, + { + label: '类型编号', + fieldName: 'machineTypeCode', + component: 'Input', + rules: 'required', + labelWidth: 100, + }, + { + label: '上级类型', + fieldName: 'parentTypeId', + component: 'TreeSelect', + defaultValue: undefined, + labelWidth: 100, + }, + { + label: '是否启用', + fieldName: 'isEnable', + component: 'Select', + componentProps: { + // 可选从DictEnum中获取 DictEnum.WY_KG 便于维护 + options: getDictOptions('wy_kg'), + }, + rules: 'selectRequired', + }, + { + label: '备注', + fieldName: 'remark', + component: 'Input', + }, +]; diff --git a/apps/web-antd/src/views/videoSystem/deviceManagement/deviceType/index.vue b/apps/web-antd/src/views/videoSystem/deviceManagement/deviceType/index.vue new file mode 100644 index 00000000..93b711b8 --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/deviceManagement/deviceType/index.vue @@ -0,0 +1,221 @@ + + + diff --git a/apps/web-antd/src/views/videoSystem/deviceManagement/deviceType/machineType-modal.vue b/apps/web-antd/src/views/videoSystem/deviceManagement/deviceType/machineType-modal.vue new file mode 100644 index 00000000..1ff558f3 --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/deviceManagement/deviceType/machineType-modal.vue @@ -0,0 +1,139 @@ + + + diff --git a/apps/web-antd/src/views/videoSystem/videoAnalysis/portraitGallery/data.ts b/apps/web-antd/src/views/videoSystem/videoAnalysis/portraitGallery/data.ts new file mode 100644 index 00000000..5817bee6 --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/videoAnalysis/portraitGallery/data.ts @@ -0,0 +1,59 @@ +import type { FormSchemaGetter } from '#/adapter/form'; +import type { VxeGridProps } from '#/adapter/vxe-table'; + +export const querySchema: FormSchemaGetter = () => [ + { + component: 'Input', + fieldName: 'libName', + label: '库名称', + }, +]; + +// 需要使用i18n注意这里要改成getter形式 否则切换语言不会刷新 +// export const columns: () => VxeGridProps['columns'] = () => [ +export const columns: VxeGridProps['columns'] = [ + { type: 'checkbox', width: 60 }, + + { + title: '人员库编码', + field: 'id', + }, + { + title: '人员库名称', + field: 'libName', + }, + { + title: '人员库描述', + field: 'libDesc', + }, + { + field: 'action', + fixed: 'right', + slots: { default: 'action' }, + title: '操作', + width: 180, + }, +]; + +export const modalSchema: FormSchemaGetter = () => [ + { + label: '主键', + fieldName: 'id', + component: 'Input', + dependencies: { + show: () => false, + triggerFields: [''], + }, + }, + { + label: '库名称', + fieldName: 'libName', + component: 'Input', + rules: 'required', + }, + { + label: '描述', + fieldName: 'libDesc', + component: 'Input', + }, +]; diff --git a/apps/web-antd/src/views/videoSystem/videoAnalysis/portraitGallery/index.vue b/apps/web-antd/src/views/videoSystem/videoAnalysis/portraitGallery/index.vue new file mode 100644 index 00000000..0a3f588e --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/videoAnalysis/portraitGallery/index.vue @@ -0,0 +1,198 @@ + + + diff --git a/apps/web-antd/src/views/videoSystem/videoAnalysis/portraitGallery/libAuth-modal.vue b/apps/web-antd/src/views/videoSystem/videoAnalysis/portraitGallery/libAuth-modal.vue new file mode 100644 index 00000000..db088285 --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/videoAnalysis/portraitGallery/libAuth-modal.vue @@ -0,0 +1,159 @@ + + + diff --git a/apps/web-antd/src/views/videoSystem/videoAnalysis/portraitGallery/personLib-modal.vue b/apps/web-antd/src/views/videoSystem/videoAnalysis/portraitGallery/personLib-modal.vue new file mode 100644 index 00000000..2737d80c --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/videoAnalysis/portraitGallery/personLib-modal.vue @@ -0,0 +1,104 @@ + + + diff --git a/apps/web-antd/src/views/videoSystem/videoAnalysis/portraitManagement/data.tsx b/apps/web-antd/src/views/videoSystem/videoAnalysis/portraitManagement/data.tsx new file mode 100644 index 00000000..67267703 --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/videoAnalysis/portraitManagement/data.tsx @@ -0,0 +1,175 @@ +import { type FormSchemaGetter } from '#/adapter/form'; +import type { VxeGridProps } from '#/adapter/vxe-table'; + +import { DictEnum } from '@vben/constants'; +import { getPopupContainer } from '@vben/utils'; + +import { getDictOptions } from '#/utils/dict'; +import { personLibList } from '#/api/sis/personLib'; +import type { PersonLibQuery, PersonLibVO } from '#/api/sis/personLib/model'; + +let libArr: PersonLibVO[] = []; +export const querySchema: FormSchemaGetter = () => [ + { + label: '图片库', + fieldName: 'libId', + component: 'ApiSelect', + componentProps: { + resultField: 'list', // 根据API返回结构调整 + labelField: 'libName', + valueField: 'id', + // immediate: true, + api: async () => { + if (!libArr || libArr.length == 0) { + const params: PersonLibQuery = { + pageNum: 1, + pageSize: 500, + }; + const res = await personLibList(params); + libArr = res.rows; + } + return libArr; + }, + }, + }, + { + component: 'Input', + fieldName: 'imgName', + label: '人像名称', + }, + { + component: 'Select', + componentProps: { + getPopupContainer, + options: getDictOptions(DictEnum.SYS_USER_SEX), + }, + fieldName: 'sex', + label: '性别', + }, +]; + +// 需要使用i18n注意这里要改成getter形式 否则切换语言不会刷新 +// export const columns: () => VxeGridProps['columns'] = () => [ +export const columns: VxeGridProps['columns'] = [ + { type: 'checkbox', width: 60 }, + /* { + title: '人员库编码', + field: 'libCode', + },*/ + { + title: '人像名称', + field: 'imgName', + }, + { + title: '性别', + field: 'sex', + }, + { + title: '邮箱', + field: 'email', + }, + { + title: '联系方式', + field: 'tel', + }, + { + title: '证件类型', + field: 'certificateType', + }, + { + title: '证件号码', + field: 'certificateNo', + }, + { + title: '出生日期', + field: 'birthDate', + }, + { + field: 'action', + fixed: 'right', + slots: { default: 'action' }, + title: '操作', + width: 180, + }, +]; + +export const modalSchema: FormSchemaGetter = () => [ + { + label: '图片库', + fieldName: 'libIds', + component: 'ApiSelect', + rules: 'required', + componentProps: { + resultField: 'list', // 根据API返回结构调整 + labelField: 'libName', + valueField: 'id', + mode: 'multiple', + // immediate: true, + api: async () => { + if (!libArr || libArr.length == 0) { + const params: PersonLibQuery = { + pageNum: 1, + pageSize: 500, + }; + const res = await personLibList(params); + libArr = res.rows; + } + return libArr; + }, + }, + }, + { + label: '人像名称', + fieldName: 'imgName', + component: 'Input', + rules: 'required', + }, + { + label: '性别', + fieldName: 'sex', + component: 'Select', + componentProps: { + getPopupContainer, + options: getDictOptions(DictEnum.SYS_USER_SEX), + }, + }, + { + label: '邮箱', + fieldName: 'email', + component: 'Input', + }, + { + label: '联系方式', + fieldName: 'tel', + component: 'Input', + }, + { + label: '证件类型', + fieldName: 'certificateType', + component: 'Select', + componentProps: { + getPopupContainer, + options: getDictOptions(DictEnum.SYS_CERTIFICATE_TYPE), + }, + }, + { + label: '证件号码', + fieldName: 'certificateNo', + component: 'Input', + }, + { + label: '出生日期', + fieldName: 'birthDate', + component: 'Input', + }, + { + label: '人像图片', + fieldName: 'imgOssId', + component: 'ImageUpload', + componentProps: { + // accept: 'image/*', // 可选拓展名或者mime类型 ,拼接 + maxCount: 1, // 最大上传文件数 默认为1 为1会绑定为string而非string[]类型 + }, + formItemClass: 'col-span-2', + }, +]; diff --git a/apps/web-antd/src/views/videoSystem/videoAnalysis/portraitManagement/imgAuth-modal.vue b/apps/web-antd/src/views/videoSystem/videoAnalysis/portraitManagement/imgAuth-modal.vue new file mode 100644 index 00000000..badb683c --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/videoAnalysis/portraitManagement/imgAuth-modal.vue @@ -0,0 +1,156 @@ + + + diff --git a/apps/web-antd/src/views/videoSystem/videoAnalysis/portraitManagement/index.vue b/apps/web-antd/src/views/videoSystem/videoAnalysis/portraitManagement/index.vue new file mode 100644 index 00000000..ebf5df11 --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/videoAnalysis/portraitManagement/index.vue @@ -0,0 +1,205 @@ + + + diff --git a/apps/web-antd/src/views/videoSystem/videoAnalysis/portraitManagement/personLibImg-modal.vue b/apps/web-antd/src/views/videoSystem/videoAnalysis/portraitManagement/personLibImg-modal.vue new file mode 100644 index 00000000..9a9a2b5c --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/videoAnalysis/portraitManagement/personLibImg-modal.vue @@ -0,0 +1,105 @@ + + + diff --git a/apps/web-antd/src/views/videoSystem/videoSurveillance/index.vue b/apps/web-antd/src/views/videoSystem/videoSurveillance/index.vue new file mode 100644 index 00000000..91149712 --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/videoSurveillance/index.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/apps/web-antd/src/views/videoSystem/videoWarning/algorithmManagement/algorithm-detail-modal.vue b/apps/web-antd/src/views/videoSystem/videoWarning/algorithmManagement/algorithm-detail-modal.vue new file mode 100644 index 00000000..0b1d6684 --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/videoWarning/algorithmManagement/algorithm-detail-modal.vue @@ -0,0 +1,257 @@ + + + diff --git a/apps/web-antd/src/views/videoSystem/videoWarning/algorithmManagement/index.vue b/apps/web-antd/src/views/videoSystem/videoWarning/algorithmManagement/index.vue new file mode 100644 index 00000000..ec595534 --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/videoWarning/algorithmManagement/index.vue @@ -0,0 +1,281 @@ + + + + + diff --git a/apps/web-antd/src/views/videoSystem/videoWarning/videoAlertList/alarm-detail-modal.vue b/apps/web-antd/src/views/videoSystem/videoWarning/videoAlertList/alarm-detail-modal.vue new file mode 100644 index 00000000..b71dd27b --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/videoWarning/videoAlertList/alarm-detail-modal.vue @@ -0,0 +1,113 @@ + + + diff --git a/apps/web-antd/src/views/videoSystem/videoWarning/videoAlertList/index.vue b/apps/web-antd/src/views/videoSystem/videoWarning/videoAlertList/index.vue new file mode 100644 index 00000000..52143fee --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/videoWarning/videoAlertList/index.vue @@ -0,0 +1,286 @@ + + + + + diff --git a/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningProcessing/data.ts b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningProcessing/data.ts new file mode 100644 index 00000000..7639cf63 --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningProcessing/data.ts @@ -0,0 +1,226 @@ +import type { FormSchemaGetter } from '#/adapter/form'; +import type { VxeGridProps } from '#/adapter/vxe-table'; +import { getDictOptions } from '#/utils/dict'; +import { renderDict } from '#/utils/render'; +import { h } from 'vue'; + +export const querySchema: FormSchemaGetter = () => [ + { + component: 'Input', + fieldName: 'alarmType', + label: '视频预警类型', + }, + { + component: 'Select', + componentProps: { + options: [ + { label: '特大', value: '特大' }, + { label: '重要', value: '重要' }, + { label: '一般', value: '一般' }, + ], + }, + fieldName: 'level', + label: '级别', + }, + { + component: 'Select', + componentProps: { + options: [ + { label: '待分配', value: '待分配' }, + { label: '处理中', value: '处理中' }, + { label: '已完成', value: '已完成' }, + ], + }, + fieldName: 'processingStatus', + label: '处理状态', + }, +]; + +export const columns: VxeGridProps['columns'] = [ + { type: 'checkbox', width: 60 }, + { + title: '预警编号', + field: 'alarmId', + width: 150, + }, + { + title: '预警时间', + field: 'alarmTime', + width: 150, + }, + { + title: '级别', + field: 'level', + width: 100, + slots: { + default: ({ row }: any) => { + const levelColors: Record = { + 特大: 'red', + 重要: 'orange', + 一般: 'blue', + }; + return h( + 'span', + { + style: { + color: levelColors[row.level] || '#666', + fontWeight: 'bold', + }, + }, + row.level, + ); + }, + }, + }, + { + title: '预警类型', + field: 'alarmType', + width: 120, + }, + { + title: '描述', + field: 'description', + minWidth: 200, + }, + { + title: '所在位置', + field: 'location', + width: 150, + }, + { + title: '处理状态', + field: 'processingStatus', + width: 100, + slots: { + default: ({ row }: any) => { + const statusColors: Record = { + 待分配: 'red', + 处理中: 'orange', + 已完成: 'green', + }; + return h( + 'span', + { + style: { + color: statusColors[row.processingStatus] || '#666', + fontWeight: 'bold', + }, + }, + row.processingStatus, + ); + }, + }, + }, + { + title: '处理情况', + field: 'processingDetails', + width: 150, + }, + { + title: '处理时间', + field: 'processingTime', + width: 150, + }, + { + field: 'action', + fixed: 'right', + slots: { default: 'action' }, + title: '操作', + width: 380, + }, +]; + +export const modalSchema: FormSchemaGetter = () => [ + { + label: '主键', + fieldName: 'id', + component: 'Input', + dependencies: { + show: () => false, + triggerFields: [''], + }, + }, + { + label: '预警编号', + fieldName: 'alarmId', + component: 'Input', + rules: 'required', + }, + { + label: '预警时间', + fieldName: 'alarmTime', + component: 'DatePicker', + componentProps: { + format: 'YYYY.MM.DD HH:mm', + valueFormat: 'YYYY.MM.DD HH:mm', + showTime: true, + }, + rules: 'required', + }, + { + label: '级别', + fieldName: 'level', + component: 'Select', + componentProps: { + options: [ + { label: '特大', value: '特大' }, + { label: '重要', value: '重要' }, + { label: '一般', value: '一般' }, + ], + }, + rules: 'selectRequired', + }, + { + label: '预警类型', + fieldName: 'alarmType', + component: 'Input', + rules: 'required', + }, + { + label: '描述', + fieldName: 'description', + component: 'InputTextArea', + componentProps: { + rows: 3, + }, + formItemClass: 'col-span-2', + }, + { + label: '所在位置', + fieldName: 'location', + component: 'Input', + rules: 'required', + }, + { + label: '处理状态', + fieldName: 'processingStatus', + component: 'Select', + componentProps: { + options: [ + { label: '待分配', value: '待分配' }, + { label: '处理中', value: '处理中' }, + { label: '已完成', value: '已完成' }, + ], + }, + rules: 'selectRequired', + }, + { + label: '处理情况', + fieldName: 'processingDetails', + component: 'InputTextArea', + componentProps: { + rows: 3, + }, + formItemClass: 'col-span-2', + }, + { + label: '处理时间', + fieldName: 'processingTime', + component: 'DatePicker', + componentProps: { + format: 'YYYY.MM.DD HH:mm', + valueFormat: 'YYYY.MM.DD HH:mm', + showTime: true, + }, + }, +]; diff --git a/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningProcessing/index.vue b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningProcessing/index.vue new file mode 100644 index 00000000..b7ca1380 --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningProcessing/index.vue @@ -0,0 +1,265 @@ + + + + + diff --git a/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningProcessing/level-setting-modal.vue b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningProcessing/level-setting-modal.vue new file mode 100644 index 00000000..1568374a --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningProcessing/level-setting-modal.vue @@ -0,0 +1,45 @@ + + + diff --git a/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningProcessing/warning-detail.vue b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningProcessing/warning-detail.vue new file mode 100644 index 00000000..fe57c7f4 --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningProcessing/warning-detail.vue @@ -0,0 +1,98 @@ + + + diff --git a/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningProcessing/warning-modal.vue b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningProcessing/warning-modal.vue new file mode 100644 index 00000000..9ad62f62 --- /dev/null +++ b/apps/web-antd/src/views/videoSystem/videoWarning/videoWarningProcessing/warning-modal.vue @@ -0,0 +1,108 @@ + + +