Browse Source

安责险

LPJ 16 hours ago
parent
commit
a685937cab

+ 89 - 0
gw-ui/src/api/slaj/insure.js

@@ -0,0 +1,89 @@
+import request from '@/utils/request'
+
+// ========== 项目保险信息 ==========
+
+export function listInsureInfo(query) {
+  return request({ url: '/insure/insureinfo/list', method: 'get', params: query })
+}
+
+export function getInsureInfo(guid) {
+  return request({ url: '/insure/insureinfo/' + guid, method: 'get' })
+}
+
+export function addInsureInfo(data) {
+  return request({ url: '/insure/insureinfo', method: 'post', data: data })
+}
+
+export function updateInsureInfo(data) {
+  return request({ url: '/insure/insureinfo', method: 'put', data: data })
+}
+
+export function delInsureInfo(guids) {
+  return request({ url: '/insure/insureinfo/' + guids, method: 'delete' })
+}
+
+// ========== 安责险安全生产评价 ==========
+
+export function listInsureEva(query) {
+  return request({ url: '/insure/insureeva/list', method: 'get', params: query })
+}
+
+export function getInsureEva(guid) {
+  return request({ url: '/insure/insureeva/' + guid, method: 'get' })
+}
+
+export function addInsureEva(data) {
+  return request({ url: '/insure/insureeva', method: 'post', data: data })
+}
+
+export function updateInsureEva(data) {
+  return request({ url: '/insure/insureeva', method: 'put', data: data })
+}
+
+export function delInsureEva(guids) {
+  return request({ url: '/insure/insureeva/' + guids, method: 'delete' })
+}
+
+// ========== 保险标段关联 ==========
+
+export function listInsureTend(query) {
+  return request({ url: '/insure/insuretend/list', method: 'get', params: query })
+}
+
+export function getInsureTend(guid) {
+  return request({ url: '/insure/insuretend/' + guid, method: 'get' })
+}
+
+export function addInsureTend(data) {
+  return request({ url: '/insure/insuretend', method: 'post', data: data })
+}
+
+export function updateInsureTend(data) {
+  return request({ url: '/insure/insuretend', method: 'put', data: data })
+}
+
+export function delInsureTend(guids) {
+  return request({ url: '/insure/insuretend/' + guids, method: 'delete' })
+}
+
+// ========== 安责险服务记录 ==========
+
+export function listInsurePre(query) {
+  return request({ url: '/insure/insurepre/list', method: 'get', params: query })
+}
+
+export function getInsurePre(guid) {
+  return request({ url: '/insure/insurepre/' + guid, method: 'get' })
+}
+
+export function addInsurePre(data) {
+  return request({ url: '/insure/insurepre', method: 'post', data: data })
+}
+
+export function updateInsurePre(data) {
+  return request({ url: '/insure/insurepre', method: 'put', data: data })
+}
+
+export function delInsurePre(guids) {
+  return request({ url: '/insure/insurepre/' + guids, method: 'delete' })
+}

+ 1 - 1
gw-ui/src/settings.js

@@ -57,6 +57,6 @@ export default {
   /**
    * 底部版权文本内容
    */
-  footerContent: 'Copyright © 2018-2026 RuoYi. All Rights Reserved.'
+  footerContent: ''
 }
 

+ 1 - 1
gw-ui/src/utils/request.js

@@ -18,7 +18,7 @@ const service = axios.create({
   // axios中请求配置有baseURL选项,表示请求URL公共部分
   baseURL: import.meta.env.VITE_SERVICE_BASE_TITLE,
   // 超时
-  timeout: 10000
+  timeout: 20000
 })
 
 // request拦截器

+ 633 - 0
gw-ui/src/views/slaj/insure/index.vue

@@ -0,0 +1,633 @@
+<template>
+  <div class="system-page config-page">
+    <el-card class="page-card">
+      <template #header>
+        <div class="card-header">
+          <div class="header-left">
+            <el-icon :size="20" color="#409EFF"><Umbrella /></el-icon>
+            <span class="page-title">项目保险信息</span>
+          </div>
+          <div class="search-right">
+            <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['insure:insureinfo:add']">新增</el-button>
+            <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate" v-hasPermi="['insure:insureinfo:edit']">修改</el-button>
+            <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete" v-hasPermi="['insure:insureinfo:remove']">删除</el-button>
+            <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['insure:insureinfo:export']">导出</el-button>
+          </div>
+        </div>
+      </template>
+
+      <div class="search-bar">
+        <el-form ref="queryFormRef" :model="queryParams" :inline="true">
+          <el-form-item label="保单编号" prop="policyNo">
+            <el-input v-model="queryParams.policyNo" placeholder="请输入保单编号" clearable style="width: 180px" @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item label="投保单位" prop="insuranceUnit">
+            <el-input v-model="queryParams.insuranceUnit" placeholder="请输入投保单位" clearable style="width: 180px" @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item label="保险公司" prop="insureCompanyName">
+            <el-input v-model="queryParams.insureCompanyName" placeholder="请输入保险公司名称" clearable style="width: 180px" @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+          </el-form-item>
+        </el-form>
+      </div>
+
+      <el-table v-loading="loading" :data="insureInfoList" @selection-change="handleSelectionChange">
+        <el-table-column type="selection" width="55" align="center" />
+        <el-table-column label="保单编号" align="center" prop="policyNo" v-if="columns.policyNo.visible" :show-overflow-tooltip="true" />
+        <el-table-column label="投保单位" align="center" prop="insuranceUnit" v-if="columns.insuranceUnit.visible" :show-overflow-tooltip="true" />
+        <el-table-column label="投保工程" align="center" prop="engName" v-if="columns.engName.visible" :show-overflow-tooltip="true" />
+        <el-table-column label="投保标段" align="center" prop="tendName" v-if="columns.tendName.visible" :show-overflow-tooltip="true" />
+        <el-table-column label="保险公司" align="center" prop="insureCompanyName" v-if="columns.insureCompanyName.visible" :show-overflow-tooltip="true" />
+        <el-table-column label="保险开始时间" align="center" prop="insureStartTime" v-if="columns.insureStartTime.visible" width="120" />
+        <el-table-column label="保险结束时间" align="center" prop="insureEndTime" v-if="columns.insureEndTime.visible" width="120" />
+        <el-table-column label="被保险人数" align="center" prop="insurePerno" v-if="columns.insurePerno.visible" />
+        <el-table-column label="保费(元)" align="center" prop="projectPerNum" v-if="columns.projectPerNum.visible" />
+        <el-table-column label="事故赔偿限额(万元)" align="center" prop="accidentLimit" v-if="columns.accidentLimit.visible" width="160" />
+        <el-table-column label="第三方服务" align="center" prop="asThreeServer" v-if="columns.asThreeServer.visible">
+          <template #default="scope">
+            {{ scope.row.asThreeServer === '1' ? '是' : '否' }}
+          </template>
+        </el-table-column>
+        <el-table-column label="服务机构" align="center" prop="serName" v-if="columns.serName.visible" :show-overflow-tooltip="true" />
+        <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180">
+          <template #default="scope">
+            <el-tooltip content="修改" placement="top">
+              <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['insure:insureinfo:edit']" />
+            </el-tooltip>
+            <el-tooltip content="删除" placement="top">
+              <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['insure:insureinfo:remove']" />
+            </el-tooltip>
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <div class="pagination">
+        <el-pagination v-model:current-page="queryParams.pageNum" v-model:page-size="queryParams.pageSize" :total="total" :page-sizes="[10, 20, 50, 100]" layout="total, sizes, prev, pager, next, jumper" @size-change="getList" @current-change="getList" />
+      </div>
+    </el-card>
+
+    <el-dialog :title="title" v-model="open" width="1100px" append-to-body class="insure-dialog">
+      <el-form :model="form" :rules="rules" ref="insureInfoRef" label-width="220px">
+        <el-divider content-position="left">投保信息</el-divider>
+        <el-row>
+          <el-col :span="12">
+            <OrgSelect v-model="form.orgGuid" label="填报单位" prop="orgGuid" :disabled="true" style="width: 100%" />
+          </el-col>
+          <el-col :span="12">
+            
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="投保单位" prop="insuranceUnit">
+              <el-input v-model="form.insuranceUnit" placeholder="请输入投保单位" />
+            </el-form-item>
+          </el-col> 
+          <el-col :span="12">
+            <el-form-item label="投保工程" prop="engGuid">
+              <el-select v-model="form.engGuid" filterable remote reserve-keyword placeholder="请输入工程名称搜索" :remote-method="searchEng" :loading="engLoading" clearable style="width: 100%" @change="handleEngChange">
+                <el-option v-for="item in engOptions" :key="item.guid" :label="item.engName" :value="item.guid" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="投保标段" prop="tendGuid">
+              <el-select v-model="form.tendGuid" filterable remote reserve-keyword placeholder="请先选择工程再搜索标段" :remote-method="searchTend" :loading="tendLoading" :disabled="!form.engGuid" clearable style="width: 100%">
+                <el-option v-for="item in tendOptions" :key="item.guid" :label="item.tendName" :value="item.guid" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="被保险人数" prop="insurePerno">
+              <el-input v-model="form.insurePerno" placeholder="请输入被保险人数" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="保单编号" prop="policyNo">
+              <el-input v-model="form.policyNo" placeholder="请输入保单编号" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="保险公司名称" prop="insureCompanyName">
+              <el-input v-model="form.insureCompanyName" placeholder="请输入保险公司名称" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="保险开始时间" prop="insureStartTime">
+              <el-date-picker v-model="form.insureStartTime" type="date" value-format="YYYY-MM-DD" placeholder="请选择保险开始时间" style="width: 100%" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="保险结束时间" prop="insureEndTime">
+              <el-date-picker v-model="form.insureEndTime" type="date" value-format="YYYY-MM-DD" placeholder="请选择保险结束时间" style="width: 100%" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="保费(元)" prop="projectPerNum">
+              <el-input-number v-model="form.projectPerNum" :precision="2" :min="0" controls-position="right" style="width: 100%" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="保险基数(万元)" prop="insuranceBase">
+              <el-input-number v-model="form.insuranceBase" :precision="6" :min="0" controls-position="right" style="width: 100%" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="保单上传" prop="policyFile">
+              <file-upload v-model="policyFileList" :limit="1" :multiple="false" button-text="上传保单" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <div class="upload-tip">本平台为互联网非涉密平台,严禁处理、传输国家秘密。严禁在本互联网非涉密平台处理、传输国家秘密,请确认扫描、传输的文件资料不涉及国家秘密。只能上传1个文件。</div>
+          </el-col>
+        </el-row>
+
+        <el-divider content-position="left">安全责任险信息</el-divider>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="每次事故赔偿限额(万元)" prop="accidentLimit">
+              <el-input-number v-model="form.accidentLimit" :precision="6" :min="0" controls-position="right" style="width: 300px" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="第三者每人人身伤亡赔偿限额(元)" prop="accidentThreeLimit">
+              <el-input-number v-model="form.accidentThreeLimit" :precision="6" :min="0" controls-position="right" style="width: 300px" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="雇员每人人身伤亡赔偿限额(万元)" prop="employeeCasualtyLimit">
+              <el-input-number v-model="form.employeeCasualtyLimit" :precision="6" :min="0" controls-position="right" style="width: 300px" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="每次事故调查勘验费用赔偿限额(万元)" prop="accidentInspectFees">
+              <el-input-number v-model="form.accidentInspectFees" :precision="6" :min="0" controls-position="right" style="width: 300px" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="每次事故抢险救援费用赔偿限额(万元)" prop="accidentRescueFees">
+              <el-input-number v-model="form.accidentRescueFees" :precision="6" :min="0" controls-position="right" style="width: 300px" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="保险期间内总累计赔偿限额(万元)" prop="aggregateIndemnityLimit">
+              <el-input-number v-model="form.aggregateIndemnityLimit" :precision="6" :min="0" controls-position="right" style="width: 300px" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-divider content-position="left">附加险信息</el-divider>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="每次法律诉讼赔偿限额(万元)" prop="lawProceedLimit">
+              <el-input-number v-model="form.lawProceedLimit" :precision="6" :min="0" controls-position="right" style="width: 300px" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="累计法律诉讼总赔偿限额(万元)" prop="lawProceedTotalLimit">
+              <el-input-number v-model="form.lawProceedTotalLimit" :precision="6" :min="0" controls-position="right" style="width: 300px" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="每人医疗费用赔偿限额(万元)" prop="medicalExpenseLimit">
+              <el-input-number v-model="form.medicalExpenseLimit" :precision="6" :min="0" controls-position="right" style="width: 300px" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="累计医疗费用赔偿限额(万元)" prop="medicalExpenseAccumuLimit">
+              <el-input-number v-model="form.medicalExpenseAccumuLimit" :precision="6" :min="0" controls-position="right" style="width: 300px" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-divider content-position="left">事故预防服务</el-divider>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="服务机构是否为第三方" prop="asThreeServer">
+              <el-select v-model="form.asThreeServer" placeholder="请选择" style="width: 300px">
+                <el-option label="否" value="0" />
+                <el-option label="是" value="1" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="服务机构名称" prop="serName">
+              <el-input v-model="form.serName" placeholder="请输入服务机构名称" style="width: 300px" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="安全生产教育培训(次/年)" prop="safetyEducationTraining">
+              <el-input-number v-model="form.safetyEducationTraining" :min="0" controls-position="right" style="width: 300px" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="事故隐患排查(次/年)" prop="accidentHazardInve">
+              <el-input-number v-model="form.accidentHazardInve" :min="0" controls-position="right" style="width: 300px" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="风险分级管控(次/年)" prop="riskGradControl">
+              <el-input-number v-model="form.riskGradControl" :min="0" controls-position="right" style="width: 300px" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="安全生产标准化建设(次/年)" prop="consSafetyProd">
+              <el-input-number v-model="form.consSafetyProd" :min="0" controls-position="right" style="width: 300px" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="应急预案管理(次/年)" prop="emerManage">
+              <el-input-number v-model="form.emerManage" :min="0" controls-position="right" style="width: 300px" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="安全生产科技推广应用(次/年)" prop="promotTechnology">
+              <el-input-number v-model="form.promotTechnology" :min="0" controls-position="right" style="width: 300px" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </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="InsureInfo">
+import { listInsureInfo, getInsureInfo, addInsureInfo, updateInsureInfo, delInsureInfo } from "@/api/slaj/insure"
+import { listAttEngBase } from "@/api/slaj/hidd"
+import { listObjTend } from "@/api/slaj/obj"
+import OrgSelect from '@/components/OrgSelect'
+
+const { proxy } = getCurrentInstance()
+const useUserStore = defineStore('user', {})
+const userStore = useUserStore()
+
+const insureInfoList = ref([])
+const open = ref(false)
+const loading = ref(true)
+const ids = ref([])
+const single = ref(true)
+const multiple = ref(true)
+const total = ref(0)
+const title = ref("")
+const policyFileList = ref([])
+
+const engOptions = ref([])
+const engLoading = ref(false)
+const tendOptions = ref([])
+const tendLoading = ref(false)
+
+const columns = ref({
+  policyNo: { label: '保单编号', visible: true },
+  insuranceUnit: { label: '投保单位', visible: true },
+  engName: { label: '投保工程', visible: true },
+  tendName: { label: '投保标段', visible: true },
+  insureCompanyName: { label: '保险公司', visible: true },
+  insureStartTime: { label: '保险开始时间', visible: true },
+  insureEndTime: { label: '保险结束时间', visible: true },
+  insurePerno: { label: '被保险人数', visible: true },
+  projectPerNum: { label: '保费(元)', visible: true },
+  accidentLimit: { label: '事故赔偿限额', visible: true },
+  asThreeServer: { label: '第三方服务', visible: true },
+  serName: { label: '服务机构', visible: true },
+})
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    policyNo: undefined,
+    insuranceUnit: undefined,
+    insureCompanyName: undefined,
+    orgGuid: undefined,
+  },
+  rules: {
+    orgGuid: [{ required: true, message: "填报单位不能为空", trigger: "change" }],
+    policyNo: [{ required: true, message: "保单编号不能为空", trigger: "blur" }],
+    insuranceUnit: [{ required: true, message: "投保单位不能为空", trigger: "blur" }],
+    insureCompanyName: [{ required: true, message: "保险公司名称不能为空", trigger: "blur" }],
+  }
+})
+
+const { queryParams, form, rules } = toRefs(data)
+
+function getList() {
+  loading.value = true
+  listInsureInfo(queryParams.value).then(res => {
+    loading.value = false
+    insureInfoList.value = res.rows
+    total.value = res.total
+  })
+}
+
+function handleQuery() {
+  queryParams.value.pageNum = 1
+  getList()
+}
+
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.guid)
+  single.value = selection.length != 1
+  multiple.value = !selection.length
+}
+
+function handleAdd() {
+  reset()
+  form.value.orgGuid = userStore.orgGuid
+  open.value = true
+  title.value = "添加项目保险信息"
+}
+
+function handleUpdate(row) {
+  const guid = row.guid || ids.value
+  reset()
+  getInsureInfo(guid).then(response => {
+    form.value = response.data
+    if (form.value.engGuid) {
+      searchEng('', form.value.engGuid)
+    }
+    if (form.value.tendGuid) {
+      searchTend('', form.value.tendGuid)
+    }
+    open.value = true
+    title.value = "修改项目保险信息"
+  })
+}
+
+function searchEng(query, initGuid) {
+  engLoading.value = true
+  const params = { engName: query, pageNum: 1, pageSize: 20 }
+  if (initGuid) {
+    params.guid = initGuid
+    delete params.engName
+  }
+  listAttEngBase(params).then(res => {
+    engOptions.value = res.rows || []
+    engLoading.value = false
+  }).catch(() => { engLoading.value = false })
+}
+
+function searchTend(query, initGuid) {
+  if (!form.value.engGuid && !initGuid) return
+  tendLoading.value = true
+  const params = { tendName: query, engGuid: form.value.engGuid, pageNum: 1, pageSize: 20 }
+  if (initGuid) {
+    params.guid = initGuid
+    delete params.tendName
+  }
+  listObjTend(params).then(res => {
+    tendOptions.value = res.rows || []
+    tendLoading.value = false
+  }).catch(() => { tendLoading.value = false })
+}
+
+function handleEngChange(val) {
+  form.value.tendGuid = undefined
+  tendOptions.value = []
+  if (val) {
+    searchTend('')
+  }
+}
+
+function submitForm() {
+  proxy.$refs["insureInfoRef"].validate(valid => {
+    if (valid) {
+      if (form.value.guid != undefined) {
+        updateInsureInfo(form.value).then(() => {
+          proxy.$modal.msgSuccess("修改成功")
+          open.value = false
+          getList()
+        })
+      } else {
+        addInsureInfo(form.value).then(() => {
+          proxy.$modal.msgSuccess("新增成功")
+          open.value = false
+          getList()
+        })
+      }
+    }
+  })
+}
+
+function handleDelete(row) {
+  const guids = row.guid || ids.value
+  proxy.$modal.confirm('是否确认删除项目保险信息编号为"' + guids + '"的数据项?').then(function () {
+    return delInsureInfo(guids)
+  }).then(() => {
+    getList()
+    proxy.$modal.msgSuccess("删除成功")
+  }).catch(() => {})
+}
+
+function cancel() {
+  open.value = false
+  reset()
+}
+
+function handleExport() {
+  proxy.download("insure/insureinfo/export", {
+    ...queryParams.value
+  }, `insureInfo_${new Date().getTime()}.xlsx`)
+}
+
+function reset() {
+  form.value = {
+    guid: undefined,
+    orgGuid: undefined,
+    engGuid: undefined,
+    tendGuid: undefined,
+    insuranceUnit: undefined,
+    insurePerno: undefined,
+    policyNo: undefined,
+    insureCompanyName: undefined,
+    insureStartTime: undefined,
+    insureEndTime: undefined,
+    projectPerNum: undefined,
+    insuranceBase: undefined,
+    accidentLimit: undefined,
+    accidentThreeLimit: undefined,
+    employeeCasualtyLimit: undefined,
+    accidentInspectFees: undefined,
+    accidentRescueFees: undefined,
+    aggregateIndemnityLimit: undefined,
+    lawProceedLimit: undefined,
+    lawProceedTotalLimit: undefined,
+    medicalExpenseLimit: undefined,
+    medicalExpenseAccumuLimit: undefined,
+    asThreeServer: undefined,
+    serName: undefined,
+    safetyEducationTraining: undefined,
+    accidentHazardInve: undefined,
+    riskGradControl: undefined,
+    consSafetyProd: undefined,
+    emerManage: undefined,
+    promotTechnology: undefined,
+  }
+  policyFileList.value = []
+  engOptions.value = []
+  tendOptions.value = []
+  proxy.resetForm("insureInfoRef")
+}
+
+onMounted(() => {
+  getList()
+})
+</script>
+
+<style scoped lang="scss">
+.system-page {
+  padding: 0px;
+  background-color: #f5f7fa;
+  min-height: calc(100vh - 10px);
+
+  :deep(.el-input__wrapper) { border-radius: 4px; }
+  :deep(.el-textarea__inner) { border-radius: 4px; }
+
+  .page-card {
+    border-radius: 1px;
+    box-shadow: 0 2px 12px rgba(0, 0, 0, 0.05);
+
+    :deep(.el-card__header) {
+      padding: 8px 20px !important;
+      border-bottom: 1px solid #ebeef5;
+      background-color: #fff;
+      border-radius: 8px 8px 0 0;
+    }
+
+    :deep(.el-card__body) {
+      padding: 0px !important;
+      background-color: #fff;
+    }
+  }
+
+  .card-header {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+
+    .header-left {
+      display: flex;
+      align-items: center;
+      gap: 10px;
+      .page-title { font-size: 18px; font-weight: 600; color: #303133; }
+    }
+    .search-right { display: flex; gap: 10px; align-items: center; }
+  }
+
+  .search-bar {
+    margin-bottom: 0px;
+    background-color: #f8faff;
+    padding: 6px 10px;
+    border-radius: 6px;
+    border: 0px solid #e6ebf5;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+
+    :deep(.el-form) {
+      display: flex;
+      flex-wrap: wrap;
+      gap: 10px;
+      .el-form-item { margin-bottom: 0; margin-right: 15px;
+        .el-form-item__label { font-weight: 500; }
+      }
+    }
+  }
+
+  .pagination {
+    margin-top: 8px;
+    margin-bottom: 8px;
+    display: flex;
+    justify-content: flex-end;
+  }
+
+  :deep(.el-table) {
+    border-radius: 4px;
+    overflow: auto;
+    height: calc(100vh - 195px);
+
+    th.el-table__cell {
+      background-color: #f5f7fa !important;
+      color: #606266;
+      font-weight: 600;
+    }
+
+    .el-button--primary.is-link { color: #409eff; }
+    .el-button--danger.is-link { color: #f56c6c; }
+  }
+}
+
+.insure-dialog {
+  :deep(.el-dialog__body) {
+    max-height: 70vh !important;
+    overflow-y: auto !important;
+    padding: 20px 20px 0 20px !important;
+  }
+
+  :deep(.el-divider) {
+    margin: 16px 0 12px 0;
+
+    .el-divider__text {
+      font-size: 15px;
+      font-weight: 600;
+      color: #303133;
+    }
+  }
+
+  .upload-tip {
+    font-size: 12px;
+    color: #e6a23c;
+    line-height: 1.6;
+    margin-top: 4px;
+    padding-left: 10px;
+  }
+}
+</style>

+ 387 - 0
gw-ui/src/views/slaj/insure/pre.vue

@@ -0,0 +1,387 @@
+<template>
+  <div class="system-page config-page">
+    <el-card class="page-card">
+      <template #header>
+        <div class="card-header">
+          <div class="header-left">
+            <el-icon :size="20" color="#409EFF"><Document /></el-icon>
+            <span class="page-title">安责险服务记录</span>
+          </div>
+          <div class="search-right">
+            <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['insure:insurepre:add']">新增</el-button>
+            <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate" v-hasPermi="['insure:insurepre:edit']">修改</el-button>
+            <el-button type="danger" plain icon="Delete" :disabled="multiple" @click="handleDelete" v-hasPermi="['insure:insurepre:remove']">删除</el-button>
+            <el-button type="warning" plain icon="Download" @click="handleExport" v-hasPermi="['insure:insurepre:export']">导出</el-button>
+          </div>
+        </div>
+      </template>
+
+      <div class="search-bar">
+        <el-form ref="queryFormRef" :model="queryParams" :inline="true">
+          <el-form-item label="保单编码" prop="policyNo">
+            <el-input v-model="queryParams.policyNo" placeholder="请输入保单编码" clearable style="width: 180px" @keyup.enter="handleQuery" />
+          </el-form-item>
+          <el-form-item label="服务类型" prop="serviceType">
+            <el-select v-model="queryParams.serviceType" placeholder="请选择服务类型" clearable style="width: 150px">
+              <el-option label="安全培训" value="1" />
+              <el-option label="隐患排查" value="2" />
+              <el-option label="风险评估" value="3" />
+              <el-option label="应急演练" value="4" />
+            </el-select>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+          </el-form-item>
+        </el-form>
+      </div>
+
+      <el-table v-loading="loading" :data="insurePreList" @selection-change="handleSelectionChange">
+        <el-table-column type="selection" width="55" align="center" />
+        <el-table-column label="保单编码" align="center" prop="policyNo" v-if="columns.policyNo.visible" :show-overflow-tooltip="true" />
+        <el-table-column label="服务类型" align="center" prop="serviceType" v-if="columns.serviceType.visible">
+          <template #default="scope">
+            {{ serviceTypeMap[scope.row.serviceType] || scope.row.serviceType }}
+          </template>
+        </el-table-column>
+        <el-table-column label="服务机构" align="center" prop="serviceOrg" v-if="columns.serviceOrg.visible" :show-overflow-tooltip="true" />
+        <el-table-column label="服务工程师" align="center" prop="serviceEngineer" v-if="columns.serviceEngineer.visible" />
+        <el-table-column label="服务时间" align="center" prop="serviceTime" v-if="columns.serviceTime.visible" width="120" />
+        <el-table-column label="培训主题" align="center" prop="trainTitle" v-if="columns.trainTitle.visible" :show-overflow-tooltip="true" />
+        <el-table-column label="隐患数量" align="center" prop="harzardNum" v-if="columns.harzardNum.visible" />
+        <el-table-column label="记录人" align="center" prop="recordPeo" v-if="columns.recordPeo.visible" />
+        <el-table-column label="编辑人" align="center" prop="editPeo" v-if="columns.editPeo.visible" />
+        <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180">
+          <template #default="scope">
+            <el-tooltip content="修改" placement="top">
+              <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['insure:insurepre:edit']" />
+            </el-tooltip>
+            <el-tooltip content="删除" placement="top">
+              <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['insure:insurepre:remove']" />
+            </el-tooltip>
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <div class="pagination">
+        <el-pagination v-model:current-page="queryParams.pageNum" v-model:page-size="queryParams.pageSize" :total="total" :page-sizes="[10, 20, 50, 100]" layout="total, sizes, prev, pager, next, jumper" @size-change="getList" @current-change="getList" />
+      </div>
+    </el-card>
+
+    <el-dialog :title="title" v-model="open" width="800px" append-to-body>
+      <el-form :model="form" :rules="rules" ref="insurePreRef" label-width="120px">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="保单编码" prop="policyNo">
+              <el-input v-model="form.policyNo" placeholder="请输入保单编码" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="服务类型" prop="serviceType">
+              <el-select v-model="form.serviceType" placeholder="请选择服务类型">
+                <el-option label="安全培训" value="1" />
+                <el-option label="隐患排查" value="2" />
+                <el-option label="风险评估" value="3" />
+                <el-option label="应急演练" value="4" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="服务机构" prop="serviceOrg">
+              <el-input v-model="form.serviceOrg" placeholder="请输入服务机构" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="服务工程师" prop="serviceEngineer">
+              <el-input v-model="form.serviceEngineer" placeholder="请输入服务工程师" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="服务时间" prop="serviceTime">
+              <el-date-picker v-model="form.serviceTime" type="date" value-format="YYYY-MM-DD" placeholder="请选择服务时间" style="width: 100%" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="隐患数量" prop="harzardNum">
+              <el-input-number v-model="form.harzardNum" :min="0" controls-position="right" style="width: 100%" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="培训主题" prop="trainTitle">
+              <el-input v-model="form.trainTitle" placeholder="请输入培训主题" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="记录人" prop="recordPeo">
+              <el-input v-model="form.recordPeo" placeholder="请输入记录人" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="服务报告" prop="report">
+              <el-input v-model="form.report" type="textarea" :rows="3" placeholder="请输入服务报告" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="安全生产教育培训" prop="safeTrain">
+              <el-input v-model="form.safeTrain" type="textarea" :rows="3" placeholder="请输入安全生产教育培训内容" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="隐患排查" prop="harzardInvest">
+              <el-input v-model="form.harzardInvest" type="textarea" :rows="3" placeholder="请输入隐患排查内容" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </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="InsurePre">
+import { listInsurePre, getInsurePre, addInsurePre, updateInsurePre, delInsurePre } from "@/api/slaj/insure"
+
+const { proxy } = getCurrentInstance()
+
+const serviceTypeMap = { '1': '安全培训', '2': '隐患排查', '3': '风险评估', '4': '应急演练' }
+
+const insurePreList = ref([])
+const open = ref(false)
+const loading = ref(true)
+const ids = ref([])
+const single = ref(true)
+const multiple = ref(true)
+const total = ref(0)
+const title = ref("")
+const columns = ref({
+  policyNo: { label: '保单编码', visible: true },
+  serviceType: { label: '服务类型', visible: true },
+  serviceOrg: { label: '服务机构', visible: true },
+  serviceEngineer: { label: '服务工程师', visible: true },
+  serviceTime: { label: '服务时间', visible: true },
+  trainTitle: { label: '培训主题', visible: true },
+  harzardNum: { label: '隐患数量', visible: true },
+  recordPeo: { label: '记录人', visible: true },
+  editPeo: { label: '编辑人', visible: true },
+})
+
+const data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    policyNo: undefined,
+    serviceType: undefined,
+    orgGuid: undefined,
+  },
+  rules: {
+    policyNo: [{ required: true, message: "保单编码不能为空", trigger: "blur" }],
+    serviceType: [{ required: true, message: "服务类型不能为空", trigger: "change" }],
+  }
+})
+
+const { queryParams, form, rules } = toRefs(data)
+
+function getList() {
+  loading.value = true
+  listInsurePre(queryParams.value).then(res => {
+    loading.value = false
+    insurePreList.value = res.rows
+    total.value = res.total
+  })
+}
+
+function handleQuery() {
+  queryParams.value.pageNum = 1
+  getList()
+}
+
+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) {
+  const guid = row.guid || ids.value
+  reset()
+  getInsurePre(guid).then(response => {
+    form.value = response.data
+    open.value = true
+    title.value = "修改安责险服务记录"
+  })
+}
+
+function submitForm() {
+  proxy.$refs["insurePreRef"].validate(valid => {
+    if (valid) {
+      if (form.value.guid != undefined) {
+        updateInsurePre(form.value).then(() => {
+          proxy.$modal.msgSuccess("修改成功")
+          open.value = false
+          getList()
+        })
+      } else {
+        addInsurePre(form.value).then(() => {
+          proxy.$modal.msgSuccess("新增成功")
+          open.value = false
+          getList()
+        })
+      }
+    }
+  })
+}
+
+function handleDelete(row) {
+  const guids = row.guid || ids.value
+  proxy.$modal.confirm('是否确认删除安责险服务记录编号为"' + guids + '"的数据项?').then(function () {
+    return delInsurePre(guids)
+  }).then(() => {
+    getList()
+    proxy.$modal.msgSuccess("删除成功")
+  }).catch(() => {})
+}
+
+function cancel() {
+  open.value = false
+  reset()
+}
+
+function handleExport() {
+  proxy.download("insure/insurepre/export", {
+    ...queryParams.value
+  }, `insurePre_${new Date().getTime()}.xlsx`)
+}
+
+function reset() {
+  form.value = {
+    guid: undefined,
+    policyNo: undefined,
+    serviceType: undefined,
+    serviceOrg: undefined,
+    serviceEngineer: undefined,
+    serviceTime: undefined,
+    report: undefined,
+    safeTrain: undefined,
+    trainTitle: undefined,
+    trainFile: undefined,
+    harzardInvest: undefined,
+    harzardNum: undefined,
+    rectifyFile: undefined,
+    orgGuid: undefined,
+    recordPeo: undefined,
+    editPeo: undefined,
+  }
+  proxy.resetForm("insurePreRef")
+}
+
+onMounted(() => {
+  getList()
+})
+</script>
+
+<style scoped lang="scss">
+.system-page {
+  padding: 0px;
+  background-color: #f5f7fa;
+  min-height: calc(100vh - 10px);
+
+  :deep(.el-input__wrapper) { border-radius: 4px; }
+  :deep(.el-textarea__inner) { border-radius: 4px; }
+
+  .page-card {
+    border-radius: 1px;
+    box-shadow: 0 2px 12px rgba(0, 0, 0, 0.05);
+
+    :deep(.el-card__header) {
+      padding: 8px 20px !important;
+      border-bottom: 1px solid #ebeef5;
+      background-color: #fff;
+      border-radius: 8px 8px 0 0;
+    }
+
+    :deep(.el-card__body) {
+      padding: 0px !important;
+      background-color: #fff;
+    }
+  }
+
+  .card-header {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+
+    .header-left {
+      display: flex;
+      align-items: center;
+      gap: 10px;
+      .page-title { font-size: 18px; font-weight: 600; color: #303133; }
+    }
+    .search-right { display: flex; gap: 10px; align-items: center; }
+  }
+
+  .search-bar {
+    margin-bottom: 0px;
+    background-color: #f8faff;
+    padding: 6px 10px;
+    border-radius: 6px;
+    border: 0px solid #e6ebf5;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+
+    :deep(.el-form) {
+      display: flex;
+      flex-wrap: wrap;
+      gap: 10px;
+      .el-form-item { margin-bottom: 0; margin-right: 15px;
+        .el-form-item__label { font-weight: 500; }
+      }
+    }
+  }
+
+  .pagination {
+    margin-top: 8px;
+    margin-bottom: 8px;
+    display: flex;
+    justify-content: flex-end;
+  }
+
+  :deep(.el-table) {
+    border-radius: 4px;
+    overflow: auto;
+    height: calc(100vh - 195px);
+
+    th.el-table__cell {
+      background-color: #f5f7fa !important;
+      color: #606266;
+      font-weight: 600;
+    }
+
+    .el-button--primary.is-link { color: #409eff; }
+    .el-button--danger.is-link { color: #f56c6c; }
+  }
+}
+</style>

+ 29 - 30
gw-ui/src/views/slaj/obj/ObjSuen.vue

@@ -72,56 +72,55 @@
     </el-card>
 
     <el-dialog v-model="dialog.visible" :title="dialog.title" width="1200px" top="5vh" append-to-body @close="cancel" class="obj-dialog">
-      <el-form ref="formRef" :model="form" :rules="rules" label-width="120px" :disabled="viewMode">
+      <el-form ref="formRef" :model="form" :rules="rules" label-width="160px" :disabled="viewMode">
         <el-row>
-          <el-col :span="12"><el-form-item label="处罚对象" prop="puniObj"><el-select v-model="form.puniObj" placeholder="请选择处罚对象" clearable style="width:100%"><el-option label="单位" value="1" /><el-option label="个人" value="2" /></el-select></el-form-item></el-col>
-          <el-col :span="12" />
+          <el-col :span="8"><el-form-item label="处罚对象" prop="puniObj"><el-select v-model="form.puniObj" placeholder="请选择处罚对象" clearable style="width:100%"><el-option label="单位" value="1" /><el-option label="个人" value="2" /></el-select></el-form-item></el-col>
+           
+          <el-col :span="8"><el-form-item label="被处罚人员姓名" prop="puniPers"><el-input v-model="form.puniPers" placeholder="请输入被处罚人员姓名" /></el-form-item></el-col>
+          <el-col :span="8"><el-form-item label="身份证号" prop="puniPersCode"><el-input v-model="form.puniPersCode" placeholder="请输入被处罚人员身份证号" /></el-form-item></el-col>
         </el-row>
         <el-row>
-          <el-col :span="12"><el-form-item label="被处罚人员姓名" prop="puniPers"><el-input v-model="form.puniPers" placeholder="请输入被处罚人员姓名" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="被处罚人员身份证号" prop="puniPersCode"><el-input v-model="form.puniPersCode" placeholder="请输入被处罚人员身份证号" /></el-form-item></el-col>
+          <el-col :span="12"><OrgSelect v-model="form.orgGuid" label="机构" prop="orgGuid" placeholder="请输入机构名称搜索" /></el-col>
+          <el-col :span="12"><OrgSelect v-model="form.puniPersOrg" label="被处罚人员所属单位" prop="puniPersOrg" placeholder="请输入机构名称搜索" /></el-col>
         </el-row>
         <el-row>
           <el-col :span="12"><el-form-item label="处罚编号" prop="punCode"><el-input v-model="form.punCode" placeholder="请输入处罚编号" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="处罚种类" prop="punCate"><el-select v-model="form.punCate" placeholder="请选择处罚种类" multiple clearable style="width:100%"><el-option label="警告" value="1" /><el-option label="罚款" value="2" /><el-option label="吊销许可证" value="3" /><el-option label="没收非法所得" value="4" /></el-select></el-form-item></el-col>
-        </el-row>
-        <el-row>
           <el-col :span="12"><el-form-item label="处罚文书号" prop="punDocNum"><el-input v-model="form.punDocNum" placeholder="请输入处罚文书号" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="处罚金额(万元)" prop="punAmt"><el-input v-model="form.punAmt" placeholder="请输入处罚金额" /></el-form-item></el-col>
-        </el-row>
+        </el-row> 
         <el-row>
-          <el-col :span="12"><el-form-item label="是否已完成处罚决定" prop="isPuniDec"><el-select v-model="form.isPuniDec" placeholder="请选择" clearable style="width:100%"><el-option label="未知" value="0" /><el-option label="是" value="1" /><el-option label="否" value="2" /></el-select></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="执法类别" prop="suneType"><el-input v-model="form.suneType" placeholder="TODO:枚举型值,旧版未找到定义" /></el-form-item></el-col>
-        </el-row>
+          <el-col :span="8"><el-form-item label="处罚种类" prop="punCate"><el-select v-model="form.punCate" placeholder="请选择处罚种类" multiple clearable style="width:100%"><el-option label="警告" value="1" /><el-option label="罚款" value="2" /><el-option label="吊销许可证" value="3" /><el-option label="没收非法所得" value="4" /></el-select></el-form-item></el-col>
+          <el-col :span="8"><el-form-item label="处罚金额(万元)" prop="punAmt"><el-input v-model="form.punAmt" placeholder="请输入处罚金额" /></el-form-item></el-col>
+          <el-col :span="8"><el-form-item label="是否已完成处罚决定" prop="isPuniDec"><el-select v-model="form.isPuniDec" placeholder="请选择" clearable style="width:100%"><el-option label="未知" value="0" /><el-option label="是" value="1" /><el-option label="否" value="2" /></el-select></el-form-item></el-col>
+         </el-row>
+        
         <el-row>
-          <el-col :span="12"><OrgSelect v-model="form.orgGuid" label="机构" prop="orgGuid" placeholder="请输入机构名称搜索" /></el-col>
-          <el-col :span="12"><OrgSelect v-model="form.puniPersOrg" label="被处罚人员所属单位" prop="puniPersOrg" placeholder="请输入机构名称搜索" /></el-col>
+          <el-col :span="8"><OrgSelect v-model="form.implPuniWiun" label="实施处罚单位" prop="implPuniWiun" placeholder="请输入机构名称搜索" /></el-col>
+          <el-col :span="8"><el-form-item label="执法类别" prop="suneType"><el-input v-model="form.suneType" placeholder="TODO:枚举型值,旧版未找到定义" /></el-form-item></el-col>
+       
         </el-row>
         <el-row>
-          <el-col :span="12"><OrgSelect v-model="form.implPuniWiun" label="实施处罚单位" prop="implPuniWiun" placeholder="请输入机构名称搜索" /></el-col>
-          <el-col :span="12"><OrgSelect v-model="form.suneWiunCode" label="执法单位" prop="suneWiunCode" placeholder="请输入机构名称搜索" /></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="执法时间" prop="suneTime"><el-date-picker v-model="form.suneTime" type="datetime" placeholder="请选择执法时间" value-format="YYYY-MM-DD HH:mm:ss" style="width: 100%" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="整改时限" prop="rectLimi"><el-input v-model="form.rectLimi" placeholder="请输入整改时限" /></el-form-item></el-col>
-        </el-row>
+          <el-col :span="8"><OrgSelect v-model="form.suneWiunCode" label="执法单位" prop="suneWiunCode" placeholder="请输入机构名称搜索" /></el-col>
+          <el-col :span="8"><el-form-item label="执法人员" prop="suenStaffGuid"><el-select v-model="form.suenStaffGuid" filterable remote clearable reserve-keyword :remote-method="searchStaff" :loading="staffLoading" placeholder="请输入姓名搜索" style="width:100%"><el-option v-for="item in staffOptions" :key="item.guid" :label="item.persName" :value="item.guid" /></el-select></el-form-item></el-col>
+          <el-col :span="8"><el-form-item label="执法时间" prop="suneTime"><el-date-picker v-model="form.suneTime" type="datetime" placeholder="请选择执法时间" value-format="YYYY-MM-DD HH:mm:ss" style="width: 100%" /></el-form-item></el-col>
+         </el-row>
         <el-row>
-          <el-col :span="12"><el-form-item label="整改开始日期" prop="rectStarTime"><el-date-picker v-model="form.rectStarTime" type="datetime" placeholder="请选择整改开始日期" value-format="YYYY-MM-DD HH:mm:ss" style="width: 100%" /></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="整改结束日期" prop="rectEndTime"><el-date-picker v-model="form.rectEndTime" type="datetime" placeholder="请选择整改结束日期" value-format="YYYY-MM-DD HH:mm:ss" style="width: 100%" /></el-form-item></el-col>
+           <el-col :span="8"><el-form-item label="整改时限" prop="rectLimi"><el-input v-model="form.rectLimi" placeholder="请输入整改时限" /></el-form-item></el-col>
+          <el-col :span="8"><el-form-item label="整改开始日期" prop="rectStarTime"><el-date-picker v-model="form.rectStarTime" type="datetime" placeholder="请选择整改开始日期" value-format="YYYY-MM-DD HH:mm:ss" style="width: 100%" /></el-form-item></el-col>
+          <el-col :span="8"><el-form-item label="整改结束日期" prop="rectEndTime"><el-date-picker v-model="form.rectEndTime" type="datetime" placeholder="请选择整改结束日期" value-format="YYYY-MM-DD HH:mm:ss" style="width: 100%" /></el-form-item></el-col>
         </el-row>
         <el-row>
-          <el-col :span="12"><el-form-item label="备案状态" prop="regStat"><el-select v-model="form.regStat" placeholder="请选择备案状态" clearable style="width:100%"><el-option label="已备案" value="0" /><el-option label="未备案" value="1" /></el-select></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="是否强制执行" prop="isEnf"><el-select v-model="form.isEnf" placeholder="请选择" clearable style="width:100%"><el-option label="是" value="1" /><el-option label="否" value="0" /></el-select></el-form-item></el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12"><el-form-item label="执法人员" prop="suenStaffGuid"><el-select v-model="form.suenStaffGuid" filterable remote clearable reserve-keyword :remote-method="searchStaff" :loading="staffLoading" placeholder="请输入姓名搜索" style="width:100%"><el-option v-for="item in staffOptions" :key="item.guid" :label="item.persName" :value="item.guid" /></el-select></el-form-item></el-col>
-          <el-col :span="12"><el-form-item label="备注" prop="note"><el-input v-model="form.note" placeholder="请输入备注" /></el-form-item></el-col>
+          <el-col :span="8"><el-form-item label="备案状态" prop="regStat"><el-select v-model="form.regStat" placeholder="请选择备案状态" clearable style="width:100%"><el-option label="已备案" value="0" /><el-option label="未备案" value="1" /></el-select></el-form-item></el-col>
+          <el-col :span="8"><el-form-item label="是否强制执行" prop="isEnf"><el-select v-model="form.isEnf" placeholder="请选择" clearable style="width:100%"><el-option label="是" value="1" /><el-option label="否" value="0" /></el-select></el-form-item></el-col>
         </el-row>
+        
         <el-row><el-col :span="24"><el-form-item label="处罚事由" prop="punReas"><el-input v-model="form.punReas" type="textarea" placeholder="请输入处罚事由" /></el-form-item></el-col></el-row>
         <el-row><el-col :span="24"><el-form-item label="处罚依据" prop="punAcc"><el-input v-model="form.punAcc" type="textarea" placeholder="请输入处罚依据" /></el-form-item></el-col></el-row>
         <el-row><el-col :span="24"><el-form-item label="处罚内容" prop="punCont"><el-input v-model="form.punCont" type="textarea" placeholder="请输入处罚内容" /></el-form-item></el-col></el-row>
         <el-row><el-col :span="24"><el-form-item label="整改执行" prop="rectImpl"><el-input v-model="form.rectImpl" type="textarea" placeholder="请输入整改执行" /></el-form-item></el-col></el-row>
         <el-row><el-col :span="24"><el-form-item label="强制措施" prop="coerMeas"><el-input v-model="form.coerMeas" type="textarea" placeholder="请输入强制措施" /></el-form-item></el-col></el-row>
+        <el-row>
+          <el-col :span="24"><el-form-item label="备注" prop="note"><el-input v-model="form.note" type="textarea" placeholder="请输入备注" /></el-form-item></el-col>
+        </el-row>
       </el-form>
       
       <template #footer>