zhuangyunsheng 3 ماه پیش
والد
کامیت
dae0099a4c

+ 1 - 1
src/api/model/autospray.js

@@ -11,7 +11,7 @@ export default {
     },
 
     record: {
-        name: "预警记录",
+        name: "喷淋记录",
         url: `${config.API_URL}/ops/autospray`,
         get: async function (data = {}) {
             return await http.post(`${this.url}/getPage`, data);

+ 6 - 6
src/api/model/broadcast.js

@@ -2,17 +2,17 @@ import config from "@/config"
 import http from "@/utils/request"
 
 export default {
-    mounted: {
-        url: `${config.API_URL}/ops/autospray/getMountedList`,
-        name: "安装点查询",
+    task: {
+        url: `${config.API_URL}/ops/broadcast/getTaskList`,
+        name: "任务查询",
         get: async function (data = {}) {
             return await http.post(this.url, data);
         }
     },
 
     record: {
-        name: "预警记录",
-        url: `${config.API_URL}/ops/autospray`,
+        name: "播报记录",
+        url: `${config.API_URL}/ops/broadcast`,
         get: async function (data = {}) {
             return await http.post(`${this.url}/getPage`, data);
         },
@@ -35,7 +35,7 @@ export default {
     },
 
     dataMock: {
-        url: `${config.API_URL}/ops/autospray`,
+        url: `${config.API_URL}/ops/broadcast`,
         name: "数据模拟-参数/复制",
         makeData: async function (data = {}) {
             return await http.post(`${this.url}/makeData`, data);

+ 1 - 1
src/api/model/envdev.js

@@ -11,7 +11,7 @@ export default {
     },
 
     record: {
-        name: "预警记录",
+        name: "监测记录",
         url: `${config.API_URL}/ops/envdev`,
         get: async function (data = {}) {
             return await http.post(`${this.url}/getPage`, data);

+ 1 - 1
src/api/model/scc.js

@@ -11,7 +11,7 @@ export default {
     },
 
     record: {
-        name: "预警记录",
+        name: "监测记录",
         url: `${config.API_URL}/ops/scc`,
         get: async function (data = {}) {
             return await http.post(`${this.url}/getPage`, data);

+ 1 - 2
src/views/dataMock/autospray/components/record/detail.vue

@@ -1,5 +1,5 @@
 <template>
-    <el-dialog v-model="visible" :title="titleMap[mode]" :width="480" :close-on-click-modal="false" @closed="$emit('closed', isDel)">
+    <el-dialog v-model="visible" :title="titleMap[mode]" :width="480" :close-on-click-modal="false" @closed="$emit('closed')">
         <el-form ref="formRef" :model="form" :rules="rules" label-width="120">
             <template v-if="props.projectId != 1">
                 <el-form-item label="所属项目" prop="projectId">
@@ -43,7 +43,6 @@ const props = defineProps({
 
 const visible = ref(false);
 const isSaving = ref(false);
-const isDel = ref(false);
 
 const mode = ref("add");
 const titleMap = reactive({

+ 1 - 12
src/views/dataMock/autospray/components/record/index.vue

@@ -1,11 +1,5 @@
 <template>
     <scTable ref="xGridTable" batchDel :apiObj="$API.autospray.record" :formConfig="formConfig" :paramsColums="paramsColums" :toolbarConfig="toolbarConfig" :columns="columns" v-bind="props.options">
-        <template #default_imgUrl="{ row }">
-            <template v-if="XEUtils.get(XEUtils.toStringJSON(row.features), 'bigImage.image')">
-                <vxe-image style="cursor: pointer;" :src="'/minio' + XEUtils.get(XEUtils.toStringJSON(row.features), 'bigImage.image')" width="40" height="40" :toolbar-config="imageToolbar"></vxe-image>
-            </template>
-        </template>
-        
         <template #action="{ row }">
             <el-button type="primary" link @click="table_edit(row)">
                 <template #icon><sc-iconify icon="ant-design:edit-outlined"></sc-iconify></template>修改
@@ -123,11 +117,6 @@ const columns = reactive([
     { visible: !props.hideHandler, title: "操作", fixed: "right", width: 140, align: "center", slots: { default: "action" } }
 ])
 
-const imageToolbar = reactive({
-    print: false,
-    download: true
-})
-
 // 显示隐藏 筛选表单
 const xGridTable = ref();
 const toggleFormEnabled = () => xGridTable.value.toggleFormEnabled();
@@ -152,7 +141,7 @@ const table_edit = row => {
 }
 
 const table_del = ({ id }) => {
-    ElMessageBox.confirm("是否确认删除该监测记录?", "删除警告", {
+    ElMessageBox.confirm("是否确认删除该喷淋记录?", "删除警告", {
         type: "warning",
         confirmButtonText: "确定",
         cancelButtonText: "取消"

+ 17 - 0
src/views/dataMock/broadcast/components/index.js

@@ -0,0 +1,17 @@
+import XEUtils from "xe-utils"
+
+const resultComps = {}
+let requireComponent = require.context(
+    "./", // 在当前目录下查找
+    true, // 遍历子文件夹
+    /\.vue$/ // 正则匹配 以 .vue结尾的文件
+)
+requireComponent.keys().forEach(fileName => {
+    const compName = fileName.replace(/^\.\/(.*)\.\w+$/, "$1")
+    const comp = requireComponent(fileName)
+    if (compName.includes("/")) {
+        if (XEUtils.last(compName.split("/")) == "index") resultComps[XEUtils.first(compName.split("/"))] = comp.default
+    } else resultComps[compName] = comp.default
+})
+
+export default resultComps

+ 112 - 0
src/views/dataMock/broadcast/components/record/detail.vue

@@ -0,0 +1,112 @@
+<template>
+    <el-dialog v-model="visible" :title="titleMap[mode]" :width="480" :close-on-click-modal="false" @closed="$emit('closed')">
+        <el-form ref="formRef" :model="form" :rules="rules" label-width="120">
+            <template v-if="props.projectId != 1">
+                <el-form-item label="所属项目" prop="projectId">
+                    <el-select v-model="form.projectId" filterable placeholder="请选择所属项目" @change="form.mountedId = null">
+                        <el-option v-for="item in $TOOL.data.get('PROJECT')" :key="item.fpiId" :label="item.projectName" :value="item.fpiId"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="广播任务" prop="taskId">
+                    <el-select v-model="form.taskId" filterable placeholder="请选择广播任务">
+                        <el-option v-for="item in filterTasks" :key="item.id" :label="item.taskName" :value="item.id"></el-option>
+                    </el-select>
+                </el-form-item>
+            </template>
+            <el-form-item label="广播时间" prop="broadcastTime">
+                <el-date-picker v-model="form.broadcastTime" type="datetimerange" :clearable="false" value-format="YYYY-MM-DD HH:mm:ss" :default-time="[new Date(2000, 1, 1, 0, 0, 0), new Date(2000, 1, 1, 23, 59, 59)]" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间"></el-date-picker>
+            </el-form-item>
+        </el-form>
+
+        <template #footer>
+            <el-button :loading="isSaving" type="primary" auto-insert-space @click="submit">保存</el-button>
+            <el-button auto-insert-space @click="visible = false">取消</el-button>
+        </template>
+    </el-dialog>
+</template>
+
+<script setup>
+import XEUtils from "xe-utils";
+import API from "@/api";
+import TOOL from "@/utils/tool";
+
+const $emit = defineEmits(["success", "closed"]);
+const props = defineProps({
+    projectId: { type: Number, default: TOOL.data.get("PROJECT_ID") }
+});
+
+const visible = ref(false);
+const isSaving = ref(false);
+
+const mode = ref("add");
+const titleMap = reactive({
+    add: "数据录入",
+    edit: "修改"
+});
+
+const form = ref({
+    id: null,
+    projectId: props.projectId,
+    taskId: null,
+    broadcastTime: [],
+    features: "{}"
+});
+const rules = reactive({
+    projectId: [{ required: true, message: "请选择所属项目" }],
+    taskId: [{ required: true, message: "请选择广播任务" }],
+    broadcastTime: [{ required: true, message: "请选择广播时间" }]
+})
+
+const tasks = ref([]);
+const filterTasks = computed(() => form.value.projectId ? XEUtils.filter(tasks.value, item => item.projectId == form.value.projectId) : []);
+const fetchTask = async () => {
+    const res = await API.broadcast.task.get();
+    tasks.value = res || [];
+    if (props.projectId == 1) form.value.taskId = XEUtils.get(XEUtils.find(res, item => item.projectId == 1), "id");
+}
+
+const open = () => {
+    visible.value = true;
+    fetchTask();
+}
+const setData = data => {
+    open();
+    mode.value = "edit";
+    XEUtils.objectEach(form.value, (_, key) => {
+        if (key == "broadcastTime") XEUtils.set(form.value, key, [XEUtils.get(data, "createTime"), XEUtils.get(data, "updateTime")])
+        else XEUtils.set(form.value, key, XEUtils.get(data, key))
+    });
+}
+
+const formRef = ref();
+const submit = () => {
+    formRef.value.validate(valid => {
+        if (valid) {
+            const data = XEUtils.omit(form.value, "broadcastTime");
+            XEUtils.set(data, "createTime", XEUtils.first(form.value.broadcastTime));
+            XEUtils.set(data, "updateTime", XEUtils.last(form.value.broadcastTime));
+            
+            isSaving.value = true;
+            API.broadcast.record[mode.value](data).then(() => {
+                isSaving.value = false;
+                ElMessage.success("操作成功");
+                visible.value = false;
+                $emit("success", mode.value);
+            }).catch(() => isSaving.value = false);
+        } else {
+            return false;
+        }
+    });
+}
+
+defineExpose({
+    open,
+    setData
+})
+</script>
+
+<style lang="scss" scoped>
+.el-form {
+    padding-right: calc(var(--el-dialog-padding-primary) + var(--el-message-close-size, 16px));
+}
+</style>

+ 152 - 0
src/views/dataMock/broadcast/components/record/index.vue

@@ -0,0 +1,152 @@
+<template>
+    <scTable ref="xGridTable" batchDel :apiObj="$API.broadcast.record" :formConfig="formConfig" :paramsColums="paramsColums" :toolbarConfig="toolbarConfig" :columns="columns" v-bind="props.options">
+        <template #action="{ row }">
+            <el-button type="primary" link @click="table_edit(row)">
+                <template #icon><sc-iconify icon="ant-design:edit-outlined"></sc-iconify></template>修改
+            </el-button>
+            <el-button type="primary" link @click="table_del(row)">
+                <template #icon><sc-iconify icon="ant-design:delete-outlined"></sc-iconify></template>删除
+            </el-button>
+        </template>
+    </scTable>
+
+    <record-detail v-if="dialog" ref="recordRef" :projectId="props.isTemp ? 1 : TOOL.data.get('PROJECT_ID')" @success="refreshTable" @closed="dialog = false"></record-detail>
+</template>
+
+<script setup>
+import moment from "moment";
+import XEUtils from "xe-utils";
+import API from "@/api";
+import TOOL from "@/utils/tool";
+import { mapFormItemSelect, mapFormItemDatePicker } from "@/components/scTable/helper";
+import { dataSource } from "@/utils/basicDic";
+import recordDetail from "./detail";
+
+const props = defineProps({
+    options: { type: Object, default: () => {} },
+    isTemp: { type: Boolean, default: false },
+    hideHandler: { type: Boolean, default: false }
+})
+const visible = computed(() => !props.isTemp);
+
+const proConfig = reactive({
+    visible,
+    span: 5,
+    storageKey: "PROJECT",
+    resetValue: TOOL.data.get("PROJECT_ID"),
+    optionProps: { label: "projectName", value: "fpiId" },
+    events: {
+        change: data => XEUtils.assign(formConfig.data, { ...data, taskId: null })
+    }
+})
+
+const mountedConfig = reactive({
+    visible,
+    api: {
+        key: "broadcast.task",
+        query: {
+            projectId: computed(() => formConfig.data.projectId),
+            projectIdNot: 1
+        }
+    },
+    slot: {
+        style: { float: "right", paddingLeft: "6px", color: "#8492a6" }
+    },
+    optionProps: { label: "taskName", value: "id", slot: ({ data }) => XEUtils.get(XEUtils.find(TOOL.data.get("PROJECT"), item => item.fpiId === data.projectId), "projectName") },
+    events: {
+        change: data => XEUtils.assign(formConfig.data, data)
+    }
+})
+
+const datetimerangeConfig = reactive({
+    span: 7,
+    resetValue: () => [moment().startOf("month").format("YYYY-MM-DD HH:mm:ss"), moment().add(1, "hour").format("YYYY-MM-DD HH:mm:ss")],
+    props: {
+        type: "datetimerange",
+        startPlaceholder: "开始时间",
+        endPlaceholder: "结束时间",
+        format: "YYYY-MM-DD HH:mm"
+    }
+})
+
+const toolbarConfig = reactive({
+    enabled: true,
+    print: false
+})
+
+const formConfig = reactive({
+    data: {
+        projectId: TOOL.data.get("PROJECT_ID"),
+        projectIdNot: 1,
+        createTime: [moment().startOf("month").format("YYYY-MM-DD HH:mm:ss"), moment().add(1, "hour").format("YYYY-MM-DD HH:mm:ss")]
+    },
+    items: [
+        mapFormItemSelect("projectId", "所属项目", proConfig),
+        mapFormItemSelect("taskId", "广播任务", mountedConfig),
+        mapFormItemDatePicker("createTime", "开始时间", datetimerangeConfig)
+    ]
+})
+
+const paramsColums = reactive([
+    { column: "projectId", field: visible.value ? "" : "projectIdNot" },
+    visible.value ? { column: "projectIdNot" } : {},
+    { column: "taskId" },
+    { column: "createTimeBegin", field: "createTime[0]" },
+    { column: "createTimeEnd", field: "createTime[1]" }
+])
+
+const columns = reactive([
+    { visible: !props.hideHandler, type: "checkbox", fixed: "left", width: 40 },
+    { type: "seq", fixed: "left", width: 60 },
+    { visible, type: "html", field: "projectName", title: "项目名称", minWidth: 160, sortable: true, formatter: ({ cellValue, row }) => cellValue || XEUtils.get(XEUtils.find(TOOL.data.get("PROJECT"), item => item.fpiId == row.projectId), "projectName") },
+    { visible, type: "html", field: "groundName", title: "工地场区", minWidth: 160, sortable: true },
+    { visible, type: "html", field: "mountedName", title: "设备安装点", minWidth: 160, sortable: true },
+    { visible, type: "html", field: "taskName", title: "任务名称", minWidth: 160, sortable: true },
+    { type: "html", field: "createTime", title: "播报开始时间", minWidth: 160, sortable: true },
+    { type: "html", field: "updateTime", title: "播报结束时间", minWidth: 160, sortable: true },
+    { visible, type: "html", field: "dataSource", title: "数据来源", fixed: "right", minWidth: 100, sortable: true, formatter: ({ cellValue }) => XEUtils.get(dataSource, cellValue, cellValue) },
+    { visible: !props.hideHandler, title: "操作", fixed: "right", width: 140, align: "center", slots: { default: "action" } }
+])
+
+// 显示隐藏 筛选表单
+const xGridTable = ref();
+const toggleFormEnabled = () => xGridTable.value.toggleFormEnabled();
+const getTableTotal = () => xGridTable.value.getTableData().tableData.length;
+
+const refreshTable = (mode = "add") => {
+    xGridTable.value.reloadColumn(columns);
+    xGridTable.value.searchData(mode);
+}
+
+const recordRef = ref();
+const dialog = ref(false);
+
+const table_add = () => {
+    dialog.value = true;
+    nextTick(() => recordRef.value?.open());
+}
+
+const table_edit = row => {
+    dialog.value = true;
+    nextTick(() => recordRef.value?.setData(row));
+}
+
+const table_del = ({ id }) => {
+    ElMessageBox.confirm("是否确认删除该播报记录?", "删除警告", {
+        type: "warning",
+        confirmButtonText: "确定",
+        cancelButtonText: "取消"
+    }).then(() => {
+        API.broadcast.record.del({ id }).then(() => {
+            ElMessage.success("操作成功");
+            refreshTable();
+        });
+    });
+}
+
+defineExpose({
+    table_add,
+    refreshTable,
+    getTableTotal
+})
+</script>

+ 167 - 0
src/views/dataMock/broadcast/detail.vue

@@ -0,0 +1,167 @@
+<template>
+    <el-dialog v-model="visible" title="数据模拟" fullscreen :close-on-click-modal="false" @closed="$emit('closed')">
+        <el-tabs v-model="apiKey">
+            <el-tab-pane label="参数配置" name="makeData"></el-tab-pane>
+            <el-tab-pane label="数据复制" name="copyData" disabled></el-tab-pane>
+        </el-tabs>
+
+        <el-form ref="formRef" :model="form" :rules="rules" label-width="126">
+            <el-row>
+                <el-col :md="12" :xs="24">
+                    <el-form-item label="模拟项目" prop="targetProjectId">
+                        <el-select v-model="form.targetProjectId" filterable placeholder="请选择模拟项目" @change="form.targetMountedId = null, dataTimeRange()">
+                            <el-option v-for="item in $TOOL.data.get('PROJECT')" :key="item.fpiId" :label="item.projectName" :value="item.fpiId"></el-option>
+                        </el-select>
+                    </el-form-item>
+                </el-col>
+                <el-col v-if="form.targetProjectId" :md="12" :xs="24">
+                    <el-form-item label="数据时间范围">
+                        <template v-if="XEUtils.isEmpty(acceptItem)">该项目未配置验收清单,<el-button type="primary" link @click="$router.push('/basic/acceptItems')">去配置</el-button></template>
+                        <template v-else-if="acceptItem.beginTime">{{ $TOOL.dateFormat(acceptItem.beginTime, "YY.M.D") }}<span>-{{ acceptItem.endTime && $TOOL.dateFormat(acceptItem.endTime, "YY.M.D") || "至今" }}</span></template>
+                        <template v-else>该项目未配置数据时间范围,<el-button type="primary" link @click="$router.push('/basic/project')">去配置</el-button></template>
+                    </el-form-item>
+                </el-col>
+                <el-col :md="12" :xs="24">
+                    <el-form-item label="广播任务" prop="targetTaskId">
+                        <el-select v-model="form.targetTaskId" filterable placeholder="请选择模拟项目广播任务">
+                            <el-option v-for="item in filterTasks" :key="item.id" :label="item.taskName" :value="item.id"></el-option>
+                        </el-select>
+                    </el-form-item>
+                </el-col>
+                <el-col :md="12" :xs="24">
+                    <el-form-item label="模拟时间范围" prop="targetTime">
+                        <el-date-picker v-model="form.targetTime" type="daterange" :clearable="false" value-format="YYYY-MM-DD 00:00:00" :shortcuts="shortcuts" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
+                    </el-form-item>
+                </el-col>
+
+                <el-col :md="12" :xs="24">
+                    <el-form-item class="step-item" label="播放时长" prop="timeSeconds">
+                        <el-input-number v-model="form.timeSeconds" :min="0" :controls="false" placeholder="播放时长"></el-input-number>
+
+                        <el-radio-group v-model="form.timeStepType" @change="stepTypeChange">
+                            <el-radio value="second">秒</el-radio>
+                            <el-radio value="minute">分钟</el-radio>
+                        </el-radio-group>
+                    </el-form-item>
+                </el-col>
+
+                <!--  s -->
+                <el-col :md="12" :xs="24">
+                    <el-form-item label="数据处理" prop="isCover">
+                        <el-radio-group v-model="form.isCover">
+                            <el-radio :value="false">重复新增</el-radio>
+                            <el-radio :value="true">数据覆盖</el-radio>
+                        </el-radio-group>
+                    </el-form-item>
+                </el-col>
+            </el-row>
+        </el-form>
+
+        <template #footer>
+            <el-button :loading="isSaving" type="primary" auto-insert-space @click="submit()">提交</el-button>
+            <el-button v-if="form.source == 'other'" :loading="isSaving" type="primary" auto-insert-space @click="submit('template')">保存为模版</el-button>
+            <el-button auto-insert-space @click="visible = false">取消</el-button>
+        </template>
+    </el-dialog>
+</template>
+
+<script setup>
+import XEUtils from "xe-utils";
+import API from "@/api";
+import TOOL from "@/utils/tool";
+import { rangeShortcuts } from "@/utils/shortcuts";
+
+const route = useRoute();
+const $emit = defineEmits(["success", "closed"]);
+const apiKey = ref("makeData");
+const visible = ref(false);
+const isSaving = ref(false);
+
+const shortcuts = rangeShortcuts("YYYY-MM-DD 00:00:00");
+const form = ref({
+    targetProjectId: TOOL.data.get("PROJECT_ID"),
+    targetMountedId: null,
+    targetTaskId: null,
+    targetTime: [],
+    timeSeconds: 20,
+    timeStepType: "minute",
+    isCover: false
+});
+
+const rules = reactive({
+    targetProjectId: [{ required: true, message: "请选择模拟项目" }],
+    targetTaskId: [{ required: true, message: "请选择模拟项目广播任务" }],
+    targetTime: [{ required: true, message: "请选择模拟时间范围" }],
+    timeSeconds: [{ required: true, message: "请输入播放时长" }],
+    isCover: [{ required: true }]
+});
+
+const acceptItem = ref({});
+const dataTimeRange = async () => {
+    const query = {
+        projectId: form.value.targetProjectId,
+        itemName: XEUtils.last(route.meta.title.split("-"))
+    }
+    const res = await API.system.project.bindItem.judgment(query);
+    acceptItem.value = res || {};
+}
+
+const tasks = ref([]);
+const filterTasks = computed(() => form.value.targetProjectId ? XEUtils.filter(tasks.value, item => item.projectId == form.value.targetProjectId) : []);
+const fetchTask = async () => {
+    const res = await API.broadcast.task.get();
+    tasks.value = res || [];
+}
+
+const open = () => {
+    visible.value = true;
+    TOOL.data.get("PROJECT_ID") && dataTimeRange();
+    fetchTask();
+}
+
+const stepTypeChange = e => {
+    if (e == "minute") XEUtils.set(form.value, "timeSeconds", XEUtils.floor(XEUtils.divide(form.value.timeSeconds, 60)));
+    if (e == "second") XEUtils.set(form.value, "timeSeconds", XEUtils.multiply(form.value.timeSeconds, 60));
+}
+
+const formRef = ref();
+const submit = key => {
+    formRef.value.validate(valid => {
+        if (valid) {
+            const data = XEUtils.omit(form.value, "targetTime", "timeStepType");
+            XEUtils.set(data, "targetMountedId", XEUtils.get(XEUtils.find(tasks.value, item => item.id == form.value.targetTaskId), "mountedId"));
+            XEUtils.set(data, "targetBeginTime", XEUtils.first(form.value.targetTime));
+            XEUtils.set(data, "targetEndTime", XEUtils.last(form.value.targetTime));
+            XEUtils.set(data, "timeSeconds", form.value.timeStepType == "minute" ? XEUtils.multiply(form.value.timeSeconds, 60) : form.value.timeSeconds);
+            
+            isSaving.value = true;
+            API.broadcast.dataMock[apiKey.value](data).then(() => {
+                isSaving.value = false;
+                ElMessage.success("操作成功");
+                visible.value = false;
+                $emit("success");
+            }).catch(() => isSaving.value = false);
+        } else {
+            return false;
+        }
+    });
+}
+
+defineExpose({
+    open
+})
+</script>
+
+<style lang="scss" scoped>
+.el-form {margin-top: 5px;padding-right: var(--el-message-close-size, 16px);}
+.el-form-item .el-radio-group {flex-wrap: nowrap;}
+
+.el-form-item .el-input-number {width: 100%;}
+.el-form-item .el-input-number :deep(.el-input__prefix) {margin-right: 8px;}
+.el-form-item .el-input-number :deep(.el-input__inner) {text-align: unset;}
+
+.el-form-item.step-item {
+    .el-input-number {flex: 1;}
+    .el-radio-group {margin-left: 20px;}
+}
+</style>

+ 46 - 0
src/views/dataMock/broadcast/index.vue

@@ -0,0 +1,46 @@
+<template>
+	<el-container class="is-vertical">
+        <sc-page-header addText="数据模拟" @add="mock_add">
+            <template #extra-right>
+                <el-button v-if="activeName == 'record'" type="primary" @click="table_add">数据录入</el-button>
+            </template>
+        </sc-page-header>
+
+        <el-tabs v-model="activeName">
+            <el-tab-pane v-for="(label, key) in workerStates" :key="key" :label="label" :name="key"></el-tab-pane>
+        </el-tabs>
+
+        <component ref="componentRef" :is="allcomp[activeName]" taskType="broadcast" />
+	</el-container>
+
+    <mock-detail v-if="dialog" ref="mockRef" @success="refreshState" @closed="dialog = false"></mock-detail>
+</template>
+
+<script setup>
+import { workerStates } from "./main";
+import comp from "./components";
+import monos from "@/views/dataMock/tasks/monos";
+import mockDetail from "./detail";
+
+const allcomp = { ...comp, monos };
+const activeName = ref("record");
+
+const componentRef = ref();
+const mockRef = ref();
+const dialog = ref(false);
+
+const table_add = () => componentRef.value.table_add();
+
+const mock_add = () => {
+    dialog.value = true;
+    nextTick(() => mockRef.value?.open());
+}
+
+const refreshState = () => {
+    if (activeName.value == "monos") setTimeout(() => componentRef.value.refreshTable(), 2000);
+}
+</script>
+
+<style lang="scss" scoped>
+.el-tabs {padding: 0 12px;background: #fff;}
+</style>

+ 4 - 0
src/views/dataMock/broadcast/main.js

@@ -0,0 +1,4 @@
+export const workerStates = {
+    record: "设备监控",
+    monos: "任务中心"
+}

+ 1 - 1
src/views/dataMock/carwash/components/record/index.vue

@@ -140,7 +140,7 @@ const table_edit = row => {
 }
 
 const table_del = ({ id }) => {
-    ElMessageBox.confirm("是否确认删除该监控记录?", "删除警告", {
+    ElMessageBox.confirm("是否确认删除该冲洗记录?", "删除警告", {
         type: "warning",
         confirmButtonText: "确定",
         cancelButtonText: "取消"

+ 1 - 2
src/views/dataMock/elevator/components/record/detail.vue

@@ -1,5 +1,5 @@
 <template>
-    <el-dialog v-model="visible" :title="titleMap[mode]" :width="880" :close-on-click-modal="false" @closed="$emit('closed', isDel)">
+    <el-dialog v-model="visible" :title="titleMap[mode]" :width="880" :close-on-click-modal="false" @closed="$emit('closed')">
         <el-form ref="formRef" :model="form" :rules="rules" label-width="140">
             <el-row v-if="props.projectId != 1">
                 <el-col :md="12" :xs="24">
@@ -192,7 +192,6 @@ const props = defineProps({
 
 const visible = ref(false);
 const isSaving = ref(false);
-const isDel = ref(false);
 
 const mode = ref("add");
 const titleMap = reactive({

+ 1 - 6
src/views/dataMock/elevator/components/record/index.vue

@@ -130,11 +130,6 @@ const columns = reactive([
     { visible: !props.hideHandler, title: "操作", fixed: "right", width: 140, align: "center", slots: { default: "action" } }
 ])
 
-const imageToolbar = reactive({
-    print: false,
-    download: true
-})
-
 // 显示隐藏 筛选表单
 const xGridTable = ref();
 const toggleFormEnabled = () => xGridTable.value.toggleFormEnabled();
@@ -159,7 +154,7 @@ const table_edit = row => {
 }
 
 const table_del = ({ id }) => {
-    ElMessageBox.confirm("是否确认删除该监记录?", "删除警告", {
+    ElMessageBox.confirm("是否确认删除该监记录?", "删除警告", {
         type: "warning",
         confirmButtonText: "确定",
         cancelButtonText: "取消"

+ 1 - 2
src/views/dataMock/envdev/components/record/detail.vue

@@ -1,5 +1,5 @@
 <template>
-    <el-dialog v-model="visible" :title="titleMap[mode]" :width="860" :close-on-click-modal="false" @closed="$emit('closed', isDel)">
+    <el-dialog v-model="visible" :title="titleMap[mode]" :width="860" :close-on-click-modal="false" @closed="$emit('closed')">
         <el-form ref="formRef" :model="form" :rules="rules" label-width="120">
             <el-row v-if="props.projectId != 1">
                 <el-col :md="12" :xs="24">
@@ -103,7 +103,6 @@ const props = defineProps({
 
 const visible = ref(false);
 const isSaving = ref(false);
-const isDel = ref(false);
 
 const mode = ref("add");
 const titleMap = reactive({

+ 1 - 2
src/views/dataMock/scc/components/record/detail.vue

@@ -1,5 +1,5 @@
 <template>
-    <el-dialog v-model="visible" :title="titleMap[mode]" :width="480" :close-on-click-modal="false" @closed="$emit('closed', isDel)">
+    <el-dialog v-model="visible" :title="titleMap[mode]" :width="480" :close-on-click-modal="false" @closed="$emit('closed')">
         <el-form ref="formRef" :model="form" :rules="rules" label-width="120">
             <template v-if="props.projectId != 1">
                 <el-form-item label="所属项目" prop="projectId">
@@ -48,7 +48,6 @@ const props = defineProps({
 
 const visible = ref(false);
 const isSaving = ref(false);
-const isDel = ref(false);
 
 const mode = ref("add");
 const titleMap = reactive({

+ 0 - 11
src/views/dataMock/scc/components/record/index.vue

@@ -1,11 +1,5 @@
 <template>
     <scTable ref="xGridTable" batchDel :apiObj="$API.scc.record" :formConfig="formConfig" :paramsColums="paramsColums" :toolbarConfig="toolbarConfig" :columns="columns" v-bind="props.options">
-        <template #default_imgUrl="{ row }">
-            <template v-if="XEUtils.get(XEUtils.toStringJSON(row.features), 'bigImage.image')">
-                <vxe-image style="cursor: pointer;" :src="'/minio' + XEUtils.get(XEUtils.toStringJSON(row.features), 'bigImage.image')" width="40" height="40" :toolbar-config="imageToolbar"></vxe-image>
-            </template>
-        </template>
-        
         <template #action="{ row }">
             <el-button type="primary" link @click="table_edit(row)">
                 <template #icon><sc-iconify icon="ant-design:edit-outlined"></sc-iconify></template>修改
@@ -136,11 +130,6 @@ const columns = reactive([
     { visible: !props.hideHandler, title: "操作", fixed: "right", width: 140, align: "center", slots: { default: "action" } }
 ])
 
-const imageToolbar = reactive({
-    print: false,
-    download: true
-})
-
 // 显示隐藏 筛选表单
 const xGridTable = ref();
 const toggleFormEnabled = () => xGridTable.value.toggleFormEnabled();

+ 1 - 2
src/views/dataMock/tcm/components/record/detail.vue

@@ -1,5 +1,5 @@
 <template>
-    <el-dialog v-model="visible" :title="titleMap[mode]" :width="860" :close-on-click-modal="false" @closed="$emit('closed', isDel)">
+    <el-dialog v-model="visible" :title="titleMap[mode]" :width="860" :close-on-click-modal="false" @closed="$emit('closed')">
         <el-form ref="formRef" :model="form" :rules="rules" label-width="120">
             <el-row v-if="props.projectId != 1">
                 <el-col :md="12" :xs="24">
@@ -103,7 +103,6 @@ const props = defineProps({
 
 const visible = ref(false);
 const isSaving = ref(false);
-const isDel = ref(false);
 
 const mode = ref("add");
 const titleMap = reactive({

+ 1 - 6
src/views/dataMock/tcm/components/record/index.vue

@@ -123,11 +123,6 @@ const columns = reactive([
     { visible: !props.hideHandler, title: "操作", fixed: "right", width: 140, align: "center", slots: { default: "action" } }
 ])
 
-const imageToolbar = reactive({
-    print: false,
-    download: true
-})
-
 // 显示隐藏 筛选表单
 const xGridTable = ref();
 const toggleFormEnabled = () => xGridTable.value.toggleFormEnabled();
@@ -152,7 +147,7 @@ const table_edit = row => {
 }
 
 const table_del = ({ id }) => {
-    ElMessageBox.confirm("是否确认删除该监记录?", "删除警告", {
+    ElMessageBox.confirm("是否确认删除该监记录?", "删除警告", {
         type: "warning",
         confirmButtonText: "确定",
         cancelButtonText: "取消"