LPJ 2 недель назад
Родитель
Сommit
b35720237a

+ 202 - 0
gw-ui/src/views/slaj/speq/BisSpeqCheck.vue

@@ -0,0 +1,202 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px">
+      <el-form-item label="责任人员" prop="legPers">
+        <el-input v-model="queryParams.legPers" placeholder="请输入责任人员" clearable style="width: 200px" @keyup.enter="handleQuery" />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['speq:check:add']">新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate" v-hasPermi="['speq:check:edit']">修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete" v-hasPermi="['speq:check:remove']">删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['speq:check:export']">导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns" storageKey="speq-speq-check-index"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="责任人员" align="center" prop="legPers" v-if="columns.legPers.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="检查日期" align="center" prop="checkTime" v-if="columns.checkTime.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="检查内容" align="center" prop="checkCont" v-if="columns.checkCont.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="发现问题" align="center" prop="probFound" v-if="columns.probFound.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="处理情况" align="center" prop="dispOppi" v-if="columns.dispOppi.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="操作" align="center" class-name="BisSpeqCheck" width="200">
+        <template #default="scope">
+          <el-tooltip content="修改" placement="top">
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['speq:check:edit']"></el-button>
+          </el-tooltip>
+          <el-tooltip content="删除" placement="top">
+            <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['speq:check:remove']"></el-button>
+          </el-tooltip>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+
+    <el-dialog :title="title" v-model="open" width="600px" append-to-body>
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="特种设备GUID" prop="speqGuid">
+          <el-input v-model="form.speqGuid" placeholder="请输入特种设备GUID" />
+        </el-form-item>
+        <el-form-item label="责任人员" prop="legPers">
+          <el-input v-model="form.legPers" placeholder="请输入责任人员" />
+        </el-form-item>
+        <el-form-item label="检查日期" prop="checkTime">
+          <el-input v-model="form.checkTime" placeholder="请输入检查日期" />
+        </el-form-item>
+        <el-form-item label="检查内容" prop="checkCont">
+          <el-input v-model="form.checkCont" placeholder="请输入检查内容" />
+        </el-form-item>
+        <el-form-item label="发现问题" prop="probFound">
+          <el-input v-model="form.probFound" placeholder="请输入发现问题" />
+        </el-form-item>
+        <el-form-item label="处理情况" prop="dispOppi">
+          <el-input v-model="form.dispOppi" placeholder="请输入处理情况" />
+        </el-form-item>
+        <el-form-item label="备注" prop="note">
+          <el-input v-model="form.note" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="SpeqCheck">
+import { listSpeqCheck, getSpeqCheck, addSpeqCheck, updateSpeqCheck, delSpeqCheck } from "@/api/slaj/speq";
+import { getCurrentInstance, reactive, ref, toRefs } from "vue";
+
+const { proxy } = getCurrentInstance();
+
+const dataList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const columns = ref({
+    legPers: { visible: true },
+    checkTime: { visible: true },
+    checkCont: { visible: true },
+    probFound: { visible: true },
+    dispOppi: { visible: true }
+});
+
+const data = reactive({
+  form: {},
+  queryParams: { pageNum: 1, pageSize: 10, legPers: null },
+  rules: {}
+});
+
+const { form, queryParams, rules } = toRefs(data);
+
+function getList() {
+  loading.value = true;
+  listSpeqCheck(queryParams.value).then(response => {
+    dataList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.guid);
+  single.value = selection.length !== 1;
+  multiple.value = !selection.length;
+}
+
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "添加特种设备检查信息";
+}
+
+function handleUpdate(row) {
+  reset();
+  const guid = row.guid || ids.value[0];
+  getSpeqCheck(guid).then(response => {
+    form.value = response.data;
+    open.value = true;
+    title.value = "修改特种设备检查信息";
+  });
+}
+
+function submitForm() {
+  proxy.$refs["formRef"].validate(valid => {
+    if (valid) {
+      if (form.value.guid != null) {
+        updateSpeqCheck(form.value).then(() => {
+          proxy.$modal.msgSuccess("修改成功");
+          open.value = false;
+          getList();
+        });
+      } else {
+        addSpeqCheck(form.value).then(() => {
+          proxy.$modal.msgSuccess("新增成功");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+function handleDelete(row) {
+  const guids = row.guid || ids.value.join(",");
+  proxy.$modal.confirm('是否确认删除所选数据?').then(function() {
+    return delSpeqCheck(guids);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  });
+}
+
+function handleExport() {
+  proxy.download('/speq/check/export', { ...queryParams.value }, `特种设备检查信息_${new Date().getTime()}.xlsx`);
+}
+
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+function reset() {
+  form.value = { guid: null, speqGuid: null, legPers: null, checkTime: null, checkCont: null, probFound: null, dispOppi: null, note: null };
+  proxy.resetForm("formRef");
+}
+
+getList();
+</script>

+ 207 - 0
gw-ui/src/views/slaj/speq/BisSpeqInre.vue

@@ -0,0 +1,207 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px">
+      <el-form-item label="安装/拆除类型" prop="insRemType">
+        <el-input v-model="queryParams.insRemType" placeholder="请输入安装/拆除类型" clearable style="width: 200px" @keyup.enter="handleQuery" />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['speq:inre:add']">新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate" v-hasPermi="['speq:inre:edit']">修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete" v-hasPermi="['speq:inre:remove']">删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['speq:inre:export']">导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns" storageKey="speq-speq-inre-index"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="安装/拆除类型" align="center" prop="insRemType" v-if="columns.insRemType.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="安装/拆除单位" align="center" prop="insRemWiunCode" v-if="columns.insRemWiunCode.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="安装/拆除日期" align="center" prop="insRemDate" v-if="columns.insRemDate.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="施工人员" align="center" prop="consPers" v-if="columns.consPers.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="现场监督人员" align="center" prop="fieldSuper" v-if="columns.fieldSuper.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="验收责任人" align="center" prop="accepPers" v-if="columns.accepPers.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="操作" align="center" class-name="BisSpeqInre" width="200">
+        <template #default="scope">
+          <el-tooltip content="修改" placement="top">
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['speq:inre:edit']"></el-button>
+          </el-tooltip>
+          <el-tooltip content="删除" placement="top">
+            <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['speq:inre:remove']"></el-button>
+          </el-tooltip>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+
+    <el-dialog :title="title" v-model="open" width="600px" append-to-body>
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="特种设备GUID" prop="speqGuid">
+          <el-input v-model="form.speqGuid" placeholder="请输入特种设备GUID" />
+        </el-form-item>
+        <el-form-item label="安装/拆除类型" prop="insRemType">
+          <el-input v-model="form.insRemType" placeholder="请输入安装/拆除类型" />
+        </el-form-item>
+        <el-form-item label="安装/拆除单位" prop="insRemWiunCode">
+          <el-input v-model="form.insRemWiunCode" placeholder="请输入安装/拆除单位" />
+        </el-form-item>
+        <el-form-item label="安装/拆除日期" prop="insRemDate">
+          <el-input v-model="form.insRemDate" placeholder="请输入安装/拆除日期" />
+        </el-form-item>
+        <el-form-item label="施工人员" prop="consPers">
+          <el-input v-model="form.consPers" placeholder="请输入施工人员" />
+        </el-form-item>
+        <el-form-item label="现场监督人员" prop="fieldSuper">
+          <el-input v-model="form.fieldSuper" placeholder="请输入现场监督人员" />
+        </el-form-item>
+        <el-form-item label="验收责任人" prop="accepPers">
+          <el-input v-model="form.accepPers" placeholder="请输入验收责任人" />
+        </el-form-item>
+        <el-form-item label="备注" prop="note">
+          <el-input v-model="form.note" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="SpeqInre">
+import { listSpeqInre, getSpeqInre, addSpeqInre, updateSpeqInre, delSpeqInre } from "@/api/slaj/speq";
+import { getCurrentInstance, reactive, ref, toRefs } from "vue";
+
+const { proxy } = getCurrentInstance();
+
+const dataList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const columns = ref({
+    insRemType: { visible: true },
+    insRemWiunCode: { visible: true },
+    insRemDate: { visible: true },
+    consPers: { visible: true },
+    fieldSuper: { visible: true },
+    accepPers: { visible: true }
+});
+
+const data = reactive({
+  form: {},
+  queryParams: { pageNum: 1, pageSize: 10, insRemType: null },
+  rules: {}
+});
+
+const { form, queryParams, rules } = toRefs(data);
+
+function getList() {
+  loading.value = true;
+  listSpeqInre(queryParams.value).then(response => {
+    dataList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.guid);
+  single.value = selection.length !== 1;
+  multiple.value = !selection.length;
+}
+
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "添加特种设备安装拆除信息";
+}
+
+function handleUpdate(row) {
+  reset();
+  const guid = row.guid || ids.value[0];
+  getSpeqInre(guid).then(response => {
+    form.value = response.data;
+    open.value = true;
+    title.value = "修改特种设备安装拆除信息";
+  });
+}
+
+function submitForm() {
+  proxy.$refs["formRef"].validate(valid => {
+    if (valid) {
+      if (form.value.guid != null) {
+        updateSpeqInre(form.value).then(() => {
+          proxy.$modal.msgSuccess("修改成功");
+          open.value = false;
+          getList();
+        });
+      } else {
+        addSpeqInre(form.value).then(() => {
+          proxy.$modal.msgSuccess("新增成功");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+function handleDelete(row) {
+  const guids = row.guid || ids.value.join(",");
+  proxy.$modal.confirm('是否确认删除所选数据?').then(function() {
+    return delSpeqInre(guids);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  });
+}
+
+function handleExport() {
+  proxy.download('/speq/inre/export', { ...queryParams.value }, `特种设备安装拆除信息_${new Date().getTime()}.xlsx`);
+}
+
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+function reset() {
+  form.value = { guid: null, speqGuid: null, insRemType: null, insRemWiunCode: null, insRemDate: null, consPers: null, fieldSuper: null, accepPers: null, note: null };
+  proxy.resetForm("formRef");
+}
+
+getList();
+</script>

+ 192 - 0
gw-ui/src/views/slaj/speq/BisSpeqInsp.vue

@@ -0,0 +1,192 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px">
+      <el-form-item label="检测机构" prop="inspWiunName">
+        <el-input v-model="queryParams.inspWiunName" placeholder="请输入检测机构" clearable style="width: 200px" @keyup.enter="handleQuery" />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['speq:insp:add']">新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate" v-hasPermi="['speq:insp:edit']">修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete" v-hasPermi="['speq:insp:remove']">删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['speq:insp:export']">导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns" storageKey="speq-speq-insp-index"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="检测机构" align="center" prop="inspWiunName" v-if="columns.inspWiunName.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="检测日期" align="center" prop="inspTime" v-if="columns.inspTime.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="检测结论" align="center" prop="inspConc" v-if="columns.inspConc.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="操作" align="center" class-name="BisSpeqInsp" width="200">
+        <template #default="scope">
+          <el-tooltip content="修改" placement="top">
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['speq:insp:edit']"></el-button>
+          </el-tooltip>
+          <el-tooltip content="删除" placement="top">
+            <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['speq:insp:remove']"></el-button>
+          </el-tooltip>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+
+    <el-dialog :title="title" v-model="open" width="600px" append-to-body>
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="特种设备GUID" prop="speqGuid">
+          <el-input v-model="form.speqGuid" placeholder="请输入特种设备GUID" />
+        </el-form-item>
+        <el-form-item label="检测机构" prop="inspWiunName">
+          <el-input v-model="form.inspWiunName" placeholder="请输入检测机构" />
+        </el-form-item>
+        <el-form-item label="检测日期" prop="inspTime">
+          <el-input v-model="form.inspTime" placeholder="请输入检测日期" />
+        </el-form-item>
+        <el-form-item label="检测结论" prop="inspConc">
+          <el-input v-model="form.inspConc" placeholder="请输入检测结论" />
+        </el-form-item>
+        <el-form-item label="备注" prop="note">
+          <el-input v-model="form.note" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="SpeqInsp">
+import { listSpeqInsp, getSpeqInsp, addSpeqInsp, updateSpeqInsp, delSpeqInsp } from "@/api/slaj/speq";
+import { getCurrentInstance, reactive, ref, toRefs } from "vue";
+
+const { proxy } = getCurrentInstance();
+
+const dataList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const columns = ref({
+    inspWiunName: { visible: true },
+    inspTime: { visible: true },
+    inspConc: { visible: true }
+});
+
+const data = reactive({
+  form: {},
+  queryParams: { pageNum: 1, pageSize: 10, inspWiunName: null },
+  rules: {}
+});
+
+const { form, queryParams, rules } = toRefs(data);
+
+function getList() {
+  loading.value = true;
+  listSpeqInsp(queryParams.value).then(response => {
+    dataList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.guid);
+  single.value = selection.length !== 1;
+  multiple.value = !selection.length;
+}
+
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "添加特种设备检测信息";
+}
+
+function handleUpdate(row) {
+  reset();
+  const guid = row.guid || ids.value[0];
+  getSpeqInsp(guid).then(response => {
+    form.value = response.data;
+    open.value = true;
+    title.value = "修改特种设备检测信息";
+  });
+}
+
+function submitForm() {
+  proxy.$refs["formRef"].validate(valid => {
+    if (valid) {
+      if (form.value.guid != null) {
+        updateSpeqInsp(form.value).then(() => {
+          proxy.$modal.msgSuccess("修改成功");
+          open.value = false;
+          getList();
+        });
+      } else {
+        addSpeqInsp(form.value).then(() => {
+          proxy.$modal.msgSuccess("新增成功");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+function handleDelete(row) {
+  const guids = row.guid || ids.value.join(",");
+  proxy.$modal.confirm('是否确认删除所选数据?').then(function() {
+    return delSpeqInsp(guids);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  });
+}
+
+function handleExport() {
+  proxy.download('/speq/insp/export', { ...queryParams.value }, `特种设备检测信息_${new Date().getTime()}.xlsx`);
+}
+
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+function reset() {
+  form.value = { guid: null, speqGuid: null, inspWiunName: null, inspTime: null, inspConc: null, note: null };
+  proxy.resetForm("formRef");
+}
+
+getList();
+</script>

+ 187 - 0
gw-ui/src/views/slaj/speq/BisSpeqInspResu.vue

@@ -0,0 +1,187 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px">
+      <el-form-item label="查验结果" prop="resultType">
+        <el-input v-model="queryParams.resultType" placeholder="请输入查验结果" clearable style="width: 200px" @keyup.enter="handleQuery" />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['speq:inspresu:add']">新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate" v-hasPermi="['speq:inspresu:edit']">修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete" v-hasPermi="['speq:inspresu:remove']">删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['speq:inspresu:export']">导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns" storageKey="speq-speq-insp-resu-index"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="查验结果" align="center" prop="resultType" v-if="columns.resultType.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="查验时间" align="center" prop="inspTime" v-if="columns.inspTime.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="操作" align="center" class-name="BisSpeqInspResu" width="200">
+        <template #default="scope">
+          <el-tooltip content="修改" placement="top">
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['speq:inspresu:edit']"></el-button>
+          </el-tooltip>
+          <el-tooltip content="删除" placement="top">
+            <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['speq:inspresu:remove']"></el-button>
+          </el-tooltip>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+
+    <el-dialog :title="title" v-model="open" width="600px" append-to-body>
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="特种设备GUID" prop="speqGuid">
+          <el-input v-model="form.speqGuid" placeholder="请输入特种设备GUID" />
+        </el-form-item>
+        <el-form-item label="查验结果" prop="resultType">
+          <el-input v-model="form.resultType" placeholder="请输入查验结果" />
+        </el-form-item>
+        <el-form-item label="查验时间" prop="inspTime">
+          <el-input v-model="form.inspTime" placeholder="请输入查验时间" />
+        </el-form-item>
+        <el-form-item label="备注" prop="note">
+          <el-input v-model="form.note" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="SpeqInspResu">
+import { listSpeqInspResu, getSpeqInspResu, addSpeqInspResu, updateSpeqInspResu, delSpeqInspResu } from "@/api/slaj/speq";
+import { getCurrentInstance, reactive, ref, toRefs } from "vue";
+
+const { proxy } = getCurrentInstance();
+
+const dataList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const columns = ref({
+    resultType: { visible: true },
+    inspTime: { visible: true }
+});
+
+const data = reactive({
+  form: {},
+  queryParams: { pageNum: 1, pageSize: 10, resultType: null },
+  rules: {}
+});
+
+const { form, queryParams, rules } = toRefs(data);
+
+function getList() {
+  loading.value = true;
+  listSpeqInspResu(queryParams.value).then(response => {
+    dataList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.guid);
+  single.value = selection.length !== 1;
+  multiple.value = !selection.length;
+}
+
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "添加特种设备查验结果";
+}
+
+function handleUpdate(row) {
+  reset();
+  const guid = row.guid || ids.value[0];
+  getSpeqInspResu(guid).then(response => {
+    form.value = response.data;
+    open.value = true;
+    title.value = "修改特种设备查验结果";
+  });
+}
+
+function submitForm() {
+  proxy.$refs["formRef"].validate(valid => {
+    if (valid) {
+      if (form.value.guid != null) {
+        updateSpeqInspResu(form.value).then(() => {
+          proxy.$modal.msgSuccess("修改成功");
+          open.value = false;
+          getList();
+        });
+      } else {
+        addSpeqInspResu(form.value).then(() => {
+          proxy.$modal.msgSuccess("新增成功");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+function handleDelete(row) {
+  const guids = row.guid || ids.value.join(",");
+  proxy.$modal.confirm('是否确认删除所选数据?').then(function() {
+    return delSpeqInspResu(guids);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  });
+}
+
+function handleExport() {
+  proxy.download('/speq/inspresu/export', { ...queryParams.value }, `特种设备查验结果_${new Date().getTime()}.xlsx`);
+}
+
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+function reset() {
+  form.value = { guid: null, speqGuid: null, resultType: null, inspTime: null, note: null };
+  proxy.resetForm("formRef");
+}
+
+getList();
+</script>

+ 202 - 0
gw-ui/src/views/slaj/speq/BisSpeqMain.vue

@@ -0,0 +1,202 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px">
+      <el-form-item label="维护保养负责人" prop="mainLegPers">
+        <el-input v-model="queryParams.mainLegPers" placeholder="请输入维护保养负责人" clearable style="width: 200px" @keyup.enter="handleQuery" />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['speq:main:add']">新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate" v-hasPermi="['speq:main:edit']">修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete" v-hasPermi="['speq:main:remove']">删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['speq:main:export']">导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns" storageKey="speq-speq-main-index"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="维护保养时间" align="center" prop="mainTime" v-if="columns.mainTime.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="维护保养负责人" align="center" prop="mainLegPers" v-if="columns.mainLegPers.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="维护保养内容" align="center" prop="mainCont" v-if="columns.mainCont.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="发现问题" align="center" prop="probFound" v-if="columns.probFound.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="处理情况" align="center" prop="dispSitu" v-if="columns.dispSitu.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="操作" align="center" class-name="BisSpeqMain" width="200">
+        <template #default="scope">
+          <el-tooltip content="修改" placement="top">
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['speq:main:edit']"></el-button>
+          </el-tooltip>
+          <el-tooltip content="删除" placement="top">
+            <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['speq:main:remove']"></el-button>
+          </el-tooltip>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+
+    <el-dialog :title="title" v-model="open" width="600px" append-to-body>
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="特种设备GUID" prop="speqGuid">
+          <el-input v-model="form.speqGuid" placeholder="请输入特种设备GUID" />
+        </el-form-item>
+        <el-form-item label="维护保养时间" prop="mainTime">
+          <el-input v-model="form.mainTime" placeholder="请输入维护保养时间" />
+        </el-form-item>
+        <el-form-item label="维护保养负责人" prop="mainLegPers">
+          <el-input v-model="form.mainLegPers" placeholder="请输入维护保养负责人" />
+        </el-form-item>
+        <el-form-item label="维护保养内容" prop="mainCont">
+          <el-input v-model="form.mainCont" placeholder="请输入维护保养内容" />
+        </el-form-item>
+        <el-form-item label="发现问题" prop="probFound">
+          <el-input v-model="form.probFound" placeholder="请输入发现问题" />
+        </el-form-item>
+        <el-form-item label="处理情况" prop="dispSitu">
+          <el-input v-model="form.dispSitu" placeholder="请输入处理情况" />
+        </el-form-item>
+        <el-form-item label="备注" prop="note">
+          <el-input v-model="form.note" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="SpeqMain">
+import { listSpeqMain, getSpeqMain, addSpeqMain, updateSpeqMain, delSpeqMain } from "@/api/slaj/speq";
+import { getCurrentInstance, reactive, ref, toRefs } from "vue";
+
+const { proxy } = getCurrentInstance();
+
+const dataList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const columns = ref({
+    mainTime: { visible: true },
+    mainLegPers: { visible: true },
+    mainCont: { visible: true },
+    probFound: { visible: true },
+    dispSitu: { visible: true }
+});
+
+const data = reactive({
+  form: {},
+  queryParams: { pageNum: 1, pageSize: 10, mainLegPers: null },
+  rules: {}
+});
+
+const { form, queryParams, rules } = toRefs(data);
+
+function getList() {
+  loading.value = true;
+  listSpeqMain(queryParams.value).then(response => {
+    dataList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.guid);
+  single.value = selection.length !== 1;
+  multiple.value = !selection.length;
+}
+
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "添加特种设备维修保养信息";
+}
+
+function handleUpdate(row) {
+  reset();
+  const guid = row.guid || ids.value[0];
+  getSpeqMain(guid).then(response => {
+    form.value = response.data;
+    open.value = true;
+    title.value = "修改特种设备维修保养信息";
+  });
+}
+
+function submitForm() {
+  proxy.$refs["formRef"].validate(valid => {
+    if (valid) {
+      if (form.value.guid != null) {
+        updateSpeqMain(form.value).then(() => {
+          proxy.$modal.msgSuccess("修改成功");
+          open.value = false;
+          getList();
+        });
+      } else {
+        addSpeqMain(form.value).then(() => {
+          proxy.$modal.msgSuccess("新增成功");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+function handleDelete(row) {
+  const guids = row.guid || ids.value.join(",");
+  proxy.$modal.confirm('是否确认删除所选数据?').then(function() {
+    return delSpeqMain(guids);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  });
+}
+
+function handleExport() {
+  proxy.download('/speq/main/export', { ...queryParams.value }, `特种设备维修保养信息_${new Date().getTime()}.xlsx`);
+}
+
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+function reset() {
+  form.value = { guid: null, speqGuid: null, mainTime: null, mainLegPers: null, mainCont: null, probFound: null, dispSitu: null, note: null };
+  proxy.resetForm("formRef");
+}
+
+getList();
+</script>

+ 187 - 0
gw-ui/src/views/slaj/speq/BisSpeqOper.vue

@@ -0,0 +1,187 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px">
+      <el-form-item label="特种设备作业人员GUID" prop="speqOperGuid">
+        <el-input v-model="queryParams.speqOperGuid" placeholder="请输入特种设备作业人员GUID" clearable style="width: 200px" @keyup.enter="handleQuery" />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['speq:oper:add']">新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate" v-hasPermi="['speq:oper:edit']">修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete" v-hasPermi="['speq:oper:remove']">删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['speq:oper:export']">导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns" storageKey="speq-speq-oper-index"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="特种设备作业人员GUID" align="center" prop="speqOperGuid" v-if="columns.speqOperGuid.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="操作时间" align="center" prop="operTime" v-if="columns.operTime.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="操作" align="center" class-name="BisSpeqOper" width="200">
+        <template #default="scope">
+          <el-tooltip content="修改" placement="top">
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['speq:oper:edit']"></el-button>
+          </el-tooltip>
+          <el-tooltip content="删除" placement="top">
+            <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['speq:oper:remove']"></el-button>
+          </el-tooltip>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+
+    <el-dialog :title="title" v-model="open" width="600px" append-to-body>
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="特种设备GUID" prop="speqGuid">
+          <el-input v-model="form.speqGuid" placeholder="请输入特种设备GUID" />
+        </el-form-item>
+        <el-form-item label="特种设备作业人员GUID" prop="speqOperGuid">
+          <el-input v-model="form.speqOperGuid" placeholder="请输入特种设备作业人员GUID" />
+        </el-form-item>
+        <el-form-item label="操作时间" prop="operTime">
+          <el-input v-model="form.operTime" placeholder="请输入操作时间" />
+        </el-form-item>
+        <el-form-item label="备注" prop="note">
+          <el-input v-model="form.note" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="SpeqOper">
+import { listSpeqOper, getSpeqOper, addSpeqOper, updateSpeqOper, delSpeqOper } from "@/api/slaj/speq";
+import { getCurrentInstance, reactive, ref, toRefs } from "vue";
+
+const { proxy } = getCurrentInstance();
+
+const dataList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const columns = ref({
+    speqOperGuid: { visible: true },
+    operTime: { visible: true }
+});
+
+const data = reactive({
+  form: {},
+  queryParams: { pageNum: 1, pageSize: 10, speqOperGuid: null },
+  rules: {}
+});
+
+const { form, queryParams, rules } = toRefs(data);
+
+function getList() {
+  loading.value = true;
+  listSpeqOper(queryParams.value).then(response => {
+    dataList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.guid);
+  single.value = selection.length !== 1;
+  multiple.value = !selection.length;
+}
+
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "添加特种设备操作记录";
+}
+
+function handleUpdate(row) {
+  reset();
+  const guid = row.guid || ids.value[0];
+  getSpeqOper(guid).then(response => {
+    form.value = response.data;
+    open.value = true;
+    title.value = "修改特种设备操作记录";
+  });
+}
+
+function submitForm() {
+  proxy.$refs["formRef"].validate(valid => {
+    if (valid) {
+      if (form.value.guid != null) {
+        updateSpeqOper(form.value).then(() => {
+          proxy.$modal.msgSuccess("修改成功");
+          open.value = false;
+          getList();
+        });
+      } else {
+        addSpeqOper(form.value).then(() => {
+          proxy.$modal.msgSuccess("新增成功");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+function handleDelete(row) {
+  const guids = row.guid || ids.value.join(",");
+  proxy.$modal.confirm('是否确认删除所选数据?').then(function() {
+    return delSpeqOper(guids);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  });
+}
+
+function handleExport() {
+  proxy.download('/speq/oper/export', { ...queryParams.value }, `特种设备操作记录_${new Date().getTime()}.xlsx`);
+}
+
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+function reset() {
+  form.value = { guid: null, speqGuid: null, speqOperGuid: null, operTime: null, note: null };
+  proxy.resetForm("formRef");
+}
+
+getList();
+</script>

+ 202 - 0
gw-ui/src/views/slaj/speq/BisSpeqOperCert.vue

@@ -0,0 +1,202 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px">
+      <el-form-item label="证书编号" prop="certNum">
+        <el-input v-model="queryParams.certNum" placeholder="请输入证书编号" clearable style="width: 200px" @keyup.enter="handleQuery" />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['speq:opercert:add']">新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate" v-hasPermi="['speq:opercert:edit']">修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete" v-hasPermi="['speq:opercert:remove']">删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['speq:opercert:export']">导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns" storageKey="speq-speq-oper-cert-index"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="证书编号" align="center" prop="certNum" v-if="columns.certNum.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="发证机关" align="center" prop="issuWiun" v-if="columns.issuWiun.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="初领日期" align="center" prop="initDate" v-if="columns.initDate.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="证书有效期" align="center" prop="certVali" v-if="columns.certVali.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="复审日期" align="center" prop="reviTime" v-if="columns.reviTime.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="操作" align="center" class-name="BisSpeqOperCert" width="200">
+        <template #default="scope">
+          <el-tooltip content="修改" placement="top">
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['speq:opercert:edit']"></el-button>
+          </el-tooltip>
+          <el-tooltip content="删除" placement="top">
+            <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['speq:opercert:remove']"></el-button>
+          </el-tooltip>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+
+    <el-dialog :title="title" v-model="open" width="600px" append-to-body>
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="特种作业人员GUID" prop="speqSpeOperPersGuid">
+          <el-input v-model="form.speqSpeOperPersGuid" placeholder="请输入特种作业人员GUID" />
+        </el-form-item>
+        <el-form-item label="证书编号" prop="certNum">
+          <el-input v-model="form.certNum" placeholder="请输入证书编号" />
+        </el-form-item>
+        <el-form-item label="发证机关" prop="issuWiun">
+          <el-input v-model="form.issuWiun" placeholder="请输入发证机关" />
+        </el-form-item>
+        <el-form-item label="初领日期" prop="initDate">
+          <el-input v-model="form.initDate" placeholder="请输入初领日期" />
+        </el-form-item>
+        <el-form-item label="证书有效期" prop="certVali">
+          <el-input v-model="form.certVali" placeholder="请输入证书有效期" />
+        </el-form-item>
+        <el-form-item label="复审日期" prop="reviTime">
+          <el-input v-model="form.reviTime" placeholder="请输入复审日期" />
+        </el-form-item>
+        <el-form-item label="备注" prop="note">
+          <el-input v-model="form.note" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="SpeqOperCert">
+import { listSpeqOperCert, getSpeqOperCert, addSpeqOperCert, updateSpeqOperCert, delSpeqOperCert } from "@/api/slaj/speq";
+import { getCurrentInstance, reactive, ref, toRefs } from "vue";
+
+const { proxy } = getCurrentInstance();
+
+const dataList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const columns = ref({
+    certNum: { visible: true },
+    issuWiun: { visible: true },
+    initDate: { visible: true },
+    certVali: { visible: true },
+    reviTime: { visible: true }
+});
+
+const data = reactive({
+  form: {},
+  queryParams: { pageNum: 1, pageSize: 10, certNum: null },
+  rules: {}
+});
+
+const { form, queryParams, rules } = toRefs(data);
+
+function getList() {
+  loading.value = true;
+  listSpeqOperCert(queryParams.value).then(response => {
+    dataList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.guid);
+  single.value = selection.length !== 1;
+  multiple.value = !selection.length;
+}
+
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "添加特种作业人员证书";
+}
+
+function handleUpdate(row) {
+  reset();
+  const guid = row.guid || ids.value[0];
+  getSpeqOperCert(guid).then(response => {
+    form.value = response.data;
+    open.value = true;
+    title.value = "修改特种作业人员证书";
+  });
+}
+
+function submitForm() {
+  proxy.$refs["formRef"].validate(valid => {
+    if (valid) {
+      if (form.value.guid != null) {
+        updateSpeqOperCert(form.value).then(() => {
+          proxy.$modal.msgSuccess("修改成功");
+          open.value = false;
+          getList();
+        });
+      } else {
+        addSpeqOperCert(form.value).then(() => {
+          proxy.$modal.msgSuccess("新增成功");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+function handleDelete(row) {
+  const guids = row.guid || ids.value.join(",");
+  proxy.$modal.confirm('是否确认删除所选数据?').then(function() {
+    return delSpeqOperCert(guids);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  });
+}
+
+function handleExport() {
+  proxy.download('/speq/opercert/export', { ...queryParams.value }, `特种作业人员证书_${new Date().getTime()}.xlsx`);
+}
+
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+function reset() {
+  form.value = { guid: null, speqSpeOperPersGuid: null, certNum: null, issuWiun: null, initDate: null, certVali: null, reviTime: null, note: null };
+  proxy.resetForm("formRef");
+}
+
+getList();
+</script>

+ 187 - 0
gw-ui/src/views/slaj/speq/BisSpeqOperInspResu.vue

@@ -0,0 +1,187 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px">
+      <el-form-item label="查验结果" prop="resultType">
+        <el-input v-model="queryParams.resultType" placeholder="请输入查验结果" clearable style="width: 200px" @keyup.enter="handleQuery" />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['speq:operinspresu:add']">新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate" v-hasPermi="['speq:operinspresu:edit']">修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete" v-hasPermi="['speq:operinspresu:remove']">删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['speq:operinspresu:export']">导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns" storageKey="speq-speq-oper-insp-resu-index"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="查验结果" align="center" prop="resultType" v-if="columns.resultType.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="查验时间" align="center" prop="inspTime" v-if="columns.inspTime.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="操作" align="center" class-name="BisSpeqOperInspResu" width="200">
+        <template #default="scope">
+          <el-tooltip content="修改" placement="top">
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['speq:operinspresu:edit']"></el-button>
+          </el-tooltip>
+          <el-tooltip content="删除" placement="top">
+            <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['speq:operinspresu:remove']"></el-button>
+          </el-tooltip>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+
+    <el-dialog :title="title" v-model="open" width="600px" append-to-body>
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="特种人员证书GUID" prop="bisSpeqOperCertGuid">
+          <el-input v-model="form.bisSpeqOperCertGuid" placeholder="请输入特种人员证书GUID" />
+        </el-form-item>
+        <el-form-item label="查验结果" prop="resultType">
+          <el-input v-model="form.resultType" placeholder="请输入查验结果" />
+        </el-form-item>
+        <el-form-item label="查验时间" prop="inspTime">
+          <el-input v-model="form.inspTime" placeholder="请输入查验时间" />
+        </el-form-item>
+        <el-form-item label="备注" prop="note">
+          <el-input v-model="form.note" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="SpeqOperInspResu">
+import { listSpeqOperInspResu, getSpeqOperInspResu, addSpeqOperInspResu, updateSpeqOperInspResu, delSpeqOperInspResu } from "@/api/slaj/speq";
+import { getCurrentInstance, reactive, ref, toRefs } from "vue";
+
+const { proxy } = getCurrentInstance();
+
+const dataList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const columns = ref({
+    resultType: { visible: true },
+    inspTime: { visible: true }
+});
+
+const data = reactive({
+  form: {},
+  queryParams: { pageNum: 1, pageSize: 10, resultType: null },
+  rules: {}
+});
+
+const { form, queryParams, rules } = toRefs(data);
+
+function getList() {
+  loading.value = true;
+  listSpeqOperInspResu(queryParams.value).then(response => {
+    dataList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.guid);
+  single.value = selection.length !== 1;
+  multiple.value = !selection.length;
+}
+
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "添加特种人员证书查验结果";
+}
+
+function handleUpdate(row) {
+  reset();
+  const guid = row.guid || ids.value[0];
+  getSpeqOperInspResu(guid).then(response => {
+    form.value = response.data;
+    open.value = true;
+    title.value = "修改特种人员证书查验结果";
+  });
+}
+
+function submitForm() {
+  proxy.$refs["formRef"].validate(valid => {
+    if (valid) {
+      if (form.value.guid != null) {
+        updateSpeqOperInspResu(form.value).then(() => {
+          proxy.$modal.msgSuccess("修改成功");
+          open.value = false;
+          getList();
+        });
+      } else {
+        addSpeqOperInspResu(form.value).then(() => {
+          proxy.$modal.msgSuccess("新增成功");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+function handleDelete(row) {
+  const guids = row.guid || ids.value.join(",");
+  proxy.$modal.confirm('是否确认删除所选数据?').then(function() {
+    return delSpeqOperInspResu(guids);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  });
+}
+
+function handleExport() {
+  proxy.download('/speq/operinspresu/export', { ...queryParams.value }, `特种人员证书查验结果_${new Date().getTime()}.xlsx`);
+}
+
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+function reset() {
+  form.value = { guid: null, bisSpeqOperCertGuid: null, resultType: null, inspTime: null, note: null };
+  proxy.resetForm("formRef");
+}
+
+getList();
+</script>

+ 192 - 0
gw-ui/src/views/slaj/speq/BisSpeqQusaiOperItem.vue

@@ -0,0 +1,192 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px">
+      <el-form-item label="准操项目" prop="citNum">
+        <el-input v-model="queryParams.citNum" placeholder="请输入准操项目" clearable style="width: 200px" @keyup.enter="handleQuery" />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['speq:qusaioperitem:add']">新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate" v-hasPermi="['speq:qusaioperitem:edit']">修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete" v-hasPermi="['speq:qusaioperitem:remove']">删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['speq:qusaioperitem:export']">导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns" storageKey="speq-speq-qusai-oper-item-index"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="准操项目" align="center" prop="citNum" v-if="columns.citNum.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="批准日期" align="center" prop="apprDate" v-if="columns.apprDate.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="有效期" align="center" prop="itemVali" v-if="columns.itemVali.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="操作" align="center" class-name="BisSpeqQusaiOperItem" width="200">
+        <template #default="scope">
+          <el-tooltip content="修改" placement="top">
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['speq:qusaioperitem:edit']"></el-button>
+          </el-tooltip>
+          <el-tooltip content="删除" placement="top">
+            <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['speq:qusaioperitem:remove']"></el-button>
+          </el-tooltip>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+
+    <el-dialog :title="title" v-model="open" width="600px" append-to-body>
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="特种作业人员证书GUID" prop="speqSpeOperCertGuid">
+          <el-input v-model="form.speqSpeOperCertGuid" placeholder="请输入特种作业人员证书GUID" />
+        </el-form-item>
+        <el-form-item label="准操项目" prop="citNum">
+          <el-input v-model="form.citNum" placeholder="请输入准操项目" />
+        </el-form-item>
+        <el-form-item label="批准日期" prop="apprDate">
+          <el-input v-model="form.apprDate" placeholder="请输入批准日期" />
+        </el-form-item>
+        <el-form-item label="有效期" prop="itemVali">
+          <el-input v-model="form.itemVali" placeholder="请输入有效期" />
+        </el-form-item>
+        <el-form-item label="备注" prop="note">
+          <el-input v-model="form.note" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="SpeqQusaiOperItem">
+import { listSpeqQusaiOperItem, getSpeqQusaiOperItem, addSpeqQusaiOperItem, updateSpeqQusaiOperItem, delSpeqQusaiOperItem } from "@/api/slaj/speq";
+import { getCurrentInstance, reactive, ref, toRefs } from "vue";
+
+const { proxy } = getCurrentInstance();
+
+const dataList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const columns = ref({
+    citNum: { visible: true },
+    apprDate: { visible: true },
+    itemVali: { visible: true }
+});
+
+const data = reactive({
+  form: {},
+  queryParams: { pageNum: 1, pageSize: 10, citNum: null },
+  rules: {}
+});
+
+const { form, queryParams, rules } = toRefs(data);
+
+function getList() {
+  loading.value = true;
+  listSpeqQusaiOperItem(queryParams.value).then(response => {
+    dataList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.guid);
+  single.value = selection.length !== 1;
+  multiple.value = !selection.length;
+}
+
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "添加特种作业人员证准操项目";
+}
+
+function handleUpdate(row) {
+  reset();
+  const guid = row.guid || ids.value[0];
+  getSpeqQusaiOperItem(guid).then(response => {
+    form.value = response.data;
+    open.value = true;
+    title.value = "修改特种作业人员证准操项目";
+  });
+}
+
+function submitForm() {
+  proxy.$refs["formRef"].validate(valid => {
+    if (valid) {
+      if (form.value.guid != null) {
+        updateSpeqQusaiOperItem(form.value).then(() => {
+          proxy.$modal.msgSuccess("修改成功");
+          open.value = false;
+          getList();
+        });
+      } else {
+        addSpeqQusaiOperItem(form.value).then(() => {
+          proxy.$modal.msgSuccess("新增成功");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+function handleDelete(row) {
+  const guids = row.guid || ids.value.join(",");
+  proxy.$modal.confirm('是否确认删除所选数据?').then(function() {
+    return delSpeqQusaiOperItem(guids);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  });
+}
+
+function handleExport() {
+  proxy.download('/speq/qusaioperitem/export', { ...queryParams.value }, `特种作业人员证准操项目_${new Date().getTime()}.xlsx`);
+}
+
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+function reset() {
+  form.value = { guid: null, speqSpeOperCertGuid: null, citNum: null, apprDate: null, itemVali: null, note: null };
+  proxy.resetForm("formRef");
+}
+
+getList();
+</script>

+ 197 - 0
gw-ui/src/views/slaj/speq/BisSpeqSpeOperPers.vue

@@ -0,0 +1,197 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="80px">
+      <el-form-item label="姓名" prop="persName">
+        <el-input v-model="queryParams.persName" placeholder="请输入姓名" clearable style="width: 200px" @keyup.enter="handleQuery" />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['speq:speoperpers:add']">新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate" v-hasPermi="['speq:speoperpers:edit']">修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete" v-hasPermi="['speq:speoperpers:remove']">删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['speq:speoperpers:export']">导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList" :columns="columns" storageKey="speq-speq-spe-oper-pers-index"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="dataList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="姓名" align="center" prop="persName" v-if="columns.persName.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="性别" align="center" prop="sex" v-if="columns.sex.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="公民身份号码" align="center" prop="citNum" v-if="columns.citNum.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="作业类别" align="center" prop="operType" v-if="columns.operType.visible" :show-overflow-tooltip="true" />
+      <el-table-column label="操作" align="center" class-name="BisSpeqSpeOperPers" width="200">
+        <template #default="scope">
+          <el-tooltip content="修改" placement="top">
+            <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['speq:speoperpers:edit']"></el-button>
+          </el-tooltip>
+          <el-tooltip content="删除" placement="top">
+            <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['speq:speoperpers:remove']"></el-button>
+          </el-tooltip>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
+
+    <el-dialog :title="title" v-model="open" width="600px" append-to-body>
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="120px">
+        <el-form-item label="公民身份号码" prop="citNum">
+          <el-input v-model="form.citNum" placeholder="请输入公民身份号码" />
+        </el-form-item>
+        <el-form-item label="所属机构GUID" prop="orgGuid">
+          <el-input v-model="form.orgGuid" placeholder="请输入所属机构GUID" />
+        </el-form-item>
+        <el-form-item label="姓名" prop="persName">
+          <el-input v-model="form.persName" placeholder="请输入姓名" />
+        </el-form-item>
+        <el-form-item label="性别" prop="sex">
+          <el-input v-model="form.sex" placeholder="请输入性别" />
+        </el-form-item>
+        <el-form-item label="作业类别" prop="operType">
+          <el-input v-model="form.operType" placeholder="请输入作业类别" />
+        </el-form-item>
+        <el-form-item label="备注" prop="note">
+          <el-input v-model="form.note" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup name="SpeqSpeOperPers">
+import { listSpeqSpeOperPers, getSpeqSpeOperPers, addSpeqSpeOperPers, updateSpeqSpeOperPers, delSpeqSpeOperPers } from "@/api/slaj/speq";
+import { getCurrentInstance, reactive, ref, toRefs } from "vue";
+
+const { proxy } = getCurrentInstance();
+
+const dataList = ref([]);
+const open = ref(false);
+const loading = ref(true);
+const showSearch = ref(true);
+const ids = ref([]);
+const single = ref(true);
+const multiple = ref(true);
+const total = ref(0);
+const title = ref("");
+
+const columns = ref({
+    persName: { visible: true },
+    sex: { visible: true },
+    citNum: { visible: true },
+    operType: { visible: true }
+});
+
+const data = reactive({
+  form: {},
+  queryParams: { pageNum: 1, pageSize: 10, persName: null },
+  rules: {}
+});
+
+const { form, queryParams, rules } = toRefs(data);
+
+function getList() {
+  loading.value = true;
+  listSpeqSpeOperPers(queryParams.value).then(response => {
+    dataList.value = response.rows;
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+function handleQuery() {
+  queryParams.value.pageNum = 1;
+  getList();
+}
+
+function resetQuery() {
+  proxy.resetForm("queryRef");
+  handleQuery();
+}
+
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.guid);
+  single.value = selection.length !== 1;
+  multiple.value = !selection.length;
+}
+
+function handleAdd() {
+  reset();
+  open.value = true;
+  title.value = "添加特种作业人员";
+}
+
+function handleUpdate(row) {
+  reset();
+  const guid = row.guid || ids.value[0];
+  getSpeqSpeOperPers(guid).then(response => {
+    form.value = response.data;
+    open.value = true;
+    title.value = "修改特种作业人员";
+  });
+}
+
+function submitForm() {
+  proxy.$refs["formRef"].validate(valid => {
+    if (valid) {
+      if (form.value.guid != null) {
+        updateSpeqSpeOperPers(form.value).then(() => {
+          proxy.$modal.msgSuccess("修改成功");
+          open.value = false;
+          getList();
+        });
+      } else {
+        addSpeqSpeOperPers(form.value).then(() => {
+          proxy.$modal.msgSuccess("新增成功");
+          open.value = false;
+          getList();
+        });
+      }
+    }
+  });
+}
+
+function handleDelete(row) {
+  const guids = row.guid || ids.value.join(",");
+  proxy.$modal.confirm('是否确认删除所选数据?').then(function() {
+    return delSpeqSpeOperPers(guids);
+  }).then(() => {
+    getList();
+    proxy.$modal.msgSuccess("删除成功");
+  });
+}
+
+function handleExport() {
+  proxy.download('/speq/speoperpers/export', { ...queryParams.value }, `特种作业人员_${new Date().getTime()}.xlsx`);
+}
+
+function cancel() {
+  open.value = false;
+  reset();
+}
+
+function reset() {
+  form.value = { guid: null, citNum: null, orgGuid: null, persName: null, sex: null, operType: null, note: null };
+  proxy.resetForm("formRef");
+}
+
+getList();
+</script>