From 1a467c30d062430d4b47988dc6d24befcfb25449 Mon Sep 17 00:00:00 2001 From: helloxujingliang <3225043@qq.com> Date: Thu, 3 Apr 2025 09:21:38 +0800 Subject: [PATCH 1/2] merge --- .../Tasks/Tasks/TaskBanner/index.vue | 57 ++++++++----------- src/utils/sqlHandler.ts | 20 +++++++ 2 files changed, 43 insertions(+), 34 deletions(-) create mode 100644 src/utils/sqlHandler.ts diff --git a/src/packages/components/Tasks/Tasks/TaskBanner/index.vue b/src/packages/components/Tasks/Tasks/TaskBanner/index.vue index 83289e0..7316159 100644 --- a/src/packages/components/Tasks/Tasks/TaskBanner/index.vue +++ b/src/packages/components/Tasks/Tasks/TaskBanner/index.vue @@ -26,6 +26,9 @@ import { useChartDataFetch } from '@/hooks'; import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'; import { EventBus } from '@/utils/eventBus'; + +import { replaceSqlParams } from '@/utils/sqlHandler'; + const props = defineProps({ chartConfig: { type: Object as PropType, @@ -33,6 +36,9 @@ const props = defineProps({ } }) + + + const { w, h } = toRefs(props.chartConfig.attr) const { colors, @@ -45,37 +51,31 @@ const { -console.log("props.chartConfig",props.chartConfig.option.showColumns); - - - - onMounted(()=>{ - const sql = JSON.parse(JSON.stringify(props.chartConfig.request.requestSQLContent)).sql; + const sql = props.chartConfig.request?.requestSQLContent?.sql; // 组件通信 获取列表中的信息 EventBus.on(props.chartConfig.id+'dataupdate', (data) => { + props.chartConfig.request.requestSQLContent.sql = replaceSqlParams(sql,{Id:data.id}) + // 数据callback处理(预览时触发) + useChartDataFetch(props.chartConfig, useChartEditStore, (resData: any) => { - props.chartConfig.request.requestSQLContent.sql = replaceSqlParams(sql,{Id:data.id}) + // props.chartConfig.option.dataset = resData; + let data = []; - // 数据callback处理(预览时触发) - useChartDataFetch(props.chartConfig, useChartEditStore, (resData: any) => { - // props.chartConfig.option.dataset = resData; - let data = []; - - props.chartConfig.option.showColumns?.forEach((item,index)=>{ - let info = { - title:item.zh_name, - desc:resData[0][firstLetterToLowerCase(item.en_name)] - } - data.push(info); - - }) - - props.chartConfig.option.dataset.data = data; - }); + props.chartConfig.option.showColumns?.forEach((item,index)=>{ + let info = { + title:item.zh_name, + desc:resData[0][firstLetterToLowerCase(item.en_name)] + } + data.push(info); + }) + + props.chartConfig.option.dataset.data = data; + }); }); + }) function firstLetterToLowerCase(str) { @@ -87,17 +87,6 @@ const handlerShowColumns = ()=> { } - -function replaceSqlParams(sql, params) { - return sql.replace(/#\{([^}]+)\}/g, (match, p1) => { - if (params.hasOwnProperty(p1)) { - // 根据参数类型决定是否添加引号(简单实现) - return typeof params[p1] === 'string' ? `'${params[p1]}'` : params[p1]; - } - throw new Error(`缺少参数: ${p1}`); - }); -} - diff --git a/src/views/demo/meshing/firemanagement/Detail.vue b/src/views/demo/meshing/firemanagement/Detail.vue new file mode 100644 index 0000000..c81dea4 --- /dev/null +++ b/src/views/demo/meshing/firemanagement/Detail.vue @@ -0,0 +1,70 @@ + + diff --git a/src/views/demo/meshing/firemanagement/Map.vue b/src/views/demo/meshing/firemanagement/Map.vue new file mode 100644 index 0000000..641628d --- /dev/null +++ b/src/views/demo/meshing/firemanagement/Map.vue @@ -0,0 +1,289 @@ + + + + diff --git a/src/views/demo/meshing/firemanagement/SelectAccount.vue b/src/views/demo/meshing/firemanagement/SelectAccount.vue new file mode 100644 index 0000000..c51f80e --- /dev/null +++ b/src/views/demo/meshing/firemanagement/SelectAccount.vue @@ -0,0 +1,57 @@ + + + diff --git a/src/views/demo/meshing/firemanagement/data.ts b/src/views/demo/meshing/firemanagement/data.ts new file mode 100644 index 0000000..e43b2c8 --- /dev/null +++ b/src/views/demo/meshing/firemanagement/data.ts @@ -0,0 +1,186 @@ +import { BasicColumn, FormSchema } from '@/components/Table'; +import { h } from 'vue'; +import { Tag } from 'ant-design-vue'; +import { getPosGroupList } from '@/api/demo/system'; + +export const columns: BasicColumn[] = [ + { + title: '站点名称', + dataIndex: 'siteName', + }, + { + title: '站点地址', + dataIndex: 'siteAddress', + }, + { + title: '站点名称', + dataIndex: 'siteName', + }, + { + title: '排序', + dataIndex: 'sortNo', + }, + { + title: '审核状态', + dataIndex: 'state', + width: 80, + customRender: ({ record }) => { + const status = record.state; + let color = ''; + const text = status; + if (status == '未审核') { + color = 'orange'; + } else if (status == '审核通过') { + color = 'green'; + } else { + color = 'red'; + } + return h(Tag, { color: color }, () => text); + }, + }, + { + title: '负责人', + dataIndex: 'director', + }, + { + title: '负责人电话', + dataIndex: 'phone', + }, +]; + +export const searchFormSchema: FormSchema[] = [ + { + field: 'state', + label: '审核状态', + component: 'Select', + colProps: { span: 8 }, + defaultValue: 3, + componentProps: { + options: [ + { + value: 0, + label: '未审核', + }, + { + value: 1, + label: '审核通过', + }, + { + value: 2, + label: '未通过', + }, + { + value: 3, + label: '全部', + }, + ], + }, + }, + { + field: 'siteName', + label: '站点名称', + component: 'Input', + colProps: { span: 8 }, + }, +]; +export const formGroupSchema: FormSchema[] = [ + { + field: 'posGroupId', + component: 'ApiSelect', + label: '职级组', + required: true, + componentProps: ({ formActionType, formModel }) => { + return { + api: getPosGroupList, // 接口 + // 接口参数 + resultField: 'result', + labelField: 'name', + valueField: 'id', + }; + }, + }, +]; + +export const formSchema: FormSchema[] = [ + { + field: 'id', + label: '部门id', + component: 'Input', + ifShow: true, + }, + { + field: 'name', + label: '部门名称', + component: 'Input', + required: true, + }, + { + field: 'parentId', + label: '上级部门', + component: 'TreeSelect', + componentProps: { + fieldNames: { + label: 'name', + key: 'id', + value: 'id', + }, + onChange: (value) => { + console.log(value); + }, + getPopupContainer: () => document.body, + }, + // required: true, + }, + // { + // field: 'orderNo', + // label: '排序', + // component: 'InputNumber', + // required: true, + // }, + { + field: 'status', + label: '状态', + component: 'RadioButtonGroup', + defaultValue: 0, + componentProps: { + options: [ + { label: '启用', value: 0 }, + { label: '停用', value: 1 }, + ], + }, + required: true, + }, + // { + // label: '备注', + // field: 'remark', + // component: 'InputTextArea', + // }, +]; + +export const SelectColumns: BasicColumn[] = [ + { + title: '用户名', + dataIndex: 'account', + width: 120, + }, + { + title: '昵称', + dataIndex: 'name', + width: 120, + }, + { + title: '所属部门', + dataIndex: 'organizations', + // customRender: ({ value }) => { + // return deptMap[value]; + // }, + }, +]; +export const SelectSearchFormSchema: FormSchema[] = [ + { + field: 'account', + label: '用户名', + component: 'Input', + colProps: { span: 8 }, + }, +]; diff --git a/src/views/demo/meshing/firemanagement/index.vue b/src/views/demo/meshing/firemanagement/index.vue new file mode 100644 index 0000000..83cc7ed --- /dev/null +++ b/src/views/demo/meshing/firemanagement/index.vue @@ -0,0 +1,158 @@ + + + + diff --git a/src/views/demo/meshing/firemanagement/page.ts b/src/views/demo/meshing/firemanagement/page.ts new file mode 100644 index 0000000..51132e0 --- /dev/null +++ b/src/views/demo/meshing/firemanagement/page.ts @@ -0,0 +1,4 @@ +export { default as AddModal } from './AddModal.vue'; +export { default as SelectAccount } from './SelectAccount.vue'; +export { default as Map } from './Map.vue'; +export { default as Detail } from './Detail.vue'; diff --git a/src/views/demo/meshing/forestranger/AddModal.vue b/src/views/demo/meshing/forestranger/AddModal.vue new file mode 100644 index 0000000..ba21839 --- /dev/null +++ b/src/views/demo/meshing/forestranger/AddModal.vue @@ -0,0 +1,139 @@ + + diff --git a/src/views/demo/meshing/forestranger/data.ts b/src/views/demo/meshing/forestranger/data.ts new file mode 100644 index 0000000..c7c7f24 --- /dev/null +++ b/src/views/demo/meshing/forestranger/data.ts @@ -0,0 +1,83 @@ +import { BasicColumn, FormSchema } from '@/components/Table'; + +export const columns: BasicColumn[] = [ + { + title: '账号', + dataIndex: 'Account', + }, + { + title: '姓名', + dataIndex: 'Name', + }, + { + title: '性别', + dataIndex: 'Sex', + customRender: ({ record }) => { + const status = record.Sex; + const enable = ~~status === 0; + const text = enable ? '男' : '女'; + return text; + }, + }, +]; + +export const searchFormSchema: FormSchema[] = [ + { + field: 'key', + label: '关键字', + component: 'Input', + colProps: { span: 8 }, + }, +]; + +export const formSchema: FormSchema[] = [ + { + field: 'id', + label: '角色名称', + required: true, + component: 'Input', + ifShow: false, + }, + { + field: 'name', + label: '人员姓名', + required: true, + component: 'Input', + }, + { + field: 'account', + label: '账号/手机号', + required: true, + component: 'Input', + }, + { + field: 'sex', + component: 'RadioGroup', + label: '人员性别', + colProps: { + span: 8, + }, + componentProps: { + options: [ + { + label: '男', + value: 0, + }, + { + label: '女', + value: 1, + }, + ], + }, + }, + { + field: 'areaId', + label: '所属机构', + slot: 'areaId', + }, + { + field: 'time', + label: '打卡时间', + slot: 'time', + }, +]; diff --git a/src/views/demo/meshing/forestranger/index.vue b/src/views/demo/meshing/forestranger/index.vue new file mode 100644 index 0000000..26dce6a --- /dev/null +++ b/src/views/demo/meshing/forestranger/index.vue @@ -0,0 +1,131 @@ + + diff --git a/src/views/demo/meshing/forestranger/page.ts b/src/views/demo/meshing/forestranger/page.ts new file mode 100644 index 0000000..91fbe20 --- /dev/null +++ b/src/views/demo/meshing/forestranger/page.ts @@ -0,0 +1 @@ +export { default as AddModal } from './AddModal.vue'; diff --git a/src/views/demo/meshing/inspection/InspectionModel.vue b/src/views/demo/meshing/inspection/InspectionModel.vue index 0b55dfb..c03cffb 100644 --- a/src/views/demo/meshing/inspection/InspectionModel.vue +++ b/src/views/demo/meshing/inspection/InspectionModel.vue @@ -8,12 +8,8 @@ :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }" :tree-data="treeData" placeholder="选择行政区划" - tree-default-expand-all - > - - + :field-names="{ label: 'name', value: 'id' }" + /> {{ @@ -89,6 +85,7 @@ import { EventBus } from '@/utils/eventBus'; import { useMessage } from '@/hooks/web/useMessage'; import { getPatrolPointByTimeSubsection } from '@/api/firegrid/patrol'; + import { getDeptList } from '@/api/demo/system'; const { createMessage } = useMessage(); defineOptions({ name: 'DeptModal' }); @@ -97,6 +94,12 @@ online: 0, offline: 0, }); + const treeData: any = ref([]); + const getTree = () => { + getDeptList().then((res) => { + treeData.value = res; + }); + }; const routerLine = ref([]); const [registerTable, { reload, getSelectRows, clearSelectedRowKeys, setTableData }] = useTable({ // 表格名称 @@ -219,6 +222,7 @@ }; onMounted(() => { getLine(); + getTree(); });