hmm 6 mēneši atpakaļ
vecāks
revīzija
86fc08e89e

+ 42 - 0
src/api/riskPrevention/BusinessPortraits.ts

@@ -0,0 +1,42 @@
+import request from '@/utils/request';
+export function getCompanyList(params) {
+  return request({
+    url: '/api/companyManagement/company/list',
+    method: 'get',
+    params: params
+  });
+};
+// 任务更新
+export function updateCompany(data) {
+  return request({
+    url: '/api/companyManagement/company/update',
+    method: 'put',
+    data: data
+  });
+};
+// 新增任务
+export function addCompany(data) {
+  return request({
+    url: '/api/companyManagement/company/create',
+    method: 'post',
+    data: data
+  });
+};
+
+//
+export function CompanyDetail(id) {
+  return request({
+    url: '/api/companyManagement/company/' + id,
+    method: 'get',
+    params: id
+  });
+}
+
+// 删除巡查任务
+export function companyDelete(data) {
+  return request({
+    url: '/api/companyManagement/company/delete',
+    method: 'delete',
+    data: data
+  });
+}

+ 19 - 19
src/views/comprehensiveGuarantee/MaterialReserveManagement/outboundDetails.vue

@@ -81,25 +81,25 @@ const props = defineProps<{
 
 
 // 模拟的数据
-let formData = ref({
-  outStockNumber: '',
-  warehouseName: '',
-  totalVolume: '',
-  totalWeight: '',
-  shipmentTotalVolume: '',
-  shipmentTotalWeight: '',
-  totalQuantity: '',
-  shipmentDate: '',
-  disasterType: '',
-  transportationOrgName: '',
-  shipperName: '',
-  shipperPhone: '',
-  shipperAddress: '',
-  shipperRemark: '',
-  receiverName: '',
-  receiverPhone: '',
-  receiverAddress: '',
-});
+const formData = {
+  outStockNumber: 'OS20230401001', // 出库单号
+  warehouseName: '北京总仓', // 仓库名称
+  totalVolume: '123456', // 出库单商品总体积(cm³)
+  totalWeight: '50.75', // 出库单商品总重量(kg)
+  shipmentTotalVolume: '125000', // 出库单发货总体积(cm³)
+  shipmentTotalWeight: '51.25', // 出库单发货总重量(kg)
+  totalQuantity: '100', // 出库单商品总数量
+  shipmentDate: '2023-04-01', // 出库单发货时间(注意:这里应该是日期格式,但el-input默认处理字符串)
+  disasterType: '洪水', // 灾种名称
+  transportationOrgName: '国家救灾物资储备中心', // 调运机构名称
+  shipperName: '张三', // 发货人姓名
+  shipperPhone: '13800000000', // 发货人手机
+  shipperAddress: '北京市东城区某街道123号', // 发货人地址
+  shipperRemark: '请小心轻放,勿压!', // 发货方备注
+  receiverName: '李四', // 收货人姓名
+  receiverPhone: '13900000000', // 收货人手机
+  receiverAddress: '河北省保定市某区456号', // 收货人地址
+};
 
 
 </script>

+ 193 - 6
src/views/riskPrevention/SafetyProductionManagement/BusinessPortraits.vue

@@ -1,11 +1,198 @@
+<!--企业画像-->
+<template>
+  <div>
+    <div v-show="!BussinessAddState.show && !BussinessEditState.show " class="app-container">
+      <div>
+        <transition name="fade">
+          <div v-show="showSearch" class="mb-[10px]">
+            <el-form ref="queryFormRef" :model="queryParams" :inline="true">
+              <el-form-item :span="5" label="辖区县:" prop="area_code" label-width="auto">
+                <el-select v-model="queryParams.area_code" placeholder="全部" clearable>
+                  <el-option v-for="item in county" :key="item.value" :label="item.label" :value="item.value"></el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item  :span="5"  prop="keyword" label-width="auto">
+                <el-input
+                  v-model="queryParams.keyword"
+                  placeholder="请输入企业名称/企业负责人"
+                  clearable
+                  @keyup.enter="handleQuery"
+                />
+              </el-form-item>
+              <el-form-item>
+                <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
+              </el-form-item>
+              <el-form-item>
+                <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" icon="Plus" @click="handleAdd">新建</el-button>
+              </el-col>
+              <el-col :span="1.5">
+                <el-button type="danger" plain :disabled="multiple" icon="Delete" @click="handleDelete(selectedRow)"> 删除 </el-button>
+              </el-col>
+            </el-row>
+          </div>
+        </transition>
+        <el-table ref="multipleTable" v-loading="loading" :data="tableData" border :max-height="maxHeight" style="width: 96%" @selection-change="handleSelectionChange">
+          <el-table-column type="selection" width="55" align="center" fixed />
+          <el-table-column label="企业名称" align="center" prop="company_name" fixed show-overflow-tooltip/>
+          <el-table-column label="辖区省" align="center" prop="province" show-overflow-tooltip/>
+          <el-table-column label="辖区市" align="center" prop="city" show-overflow-tooltip/>
+          <el-table-column label="辖区县" align="center" prop="district" show-overflow-tooltip/>
+          <el-table-column label="企业地址" align="center" prop="company_address" show-overflow-tooltip/>
+          <el-table-column label="企业负责人" align="center" prop="responsible_person" show-overflow-tooltip/>
+          <el-table-column label="移动电话" align="center" prop="phone" show-overflow-tooltip/>
+          <el-table-column label="企业类型" align="center" prop="company_type" show-overflow-tooltip/>
+                    <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
+            <template #default="scope">
+              <el-button type="text" class="common-btn-text-primary" @click="handleedit(scope.row)">编辑</el-button>
+              <el-button type="text" class="common-btn-text-primary" @click="handleDelete(scope.row)">移除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination
+          v-show="total > 0"
+          v-model:page="queryParams.page"
+          v-model:limit="queryParams.pageSize"
+          :total="total"
+          @pagination="tableData"
+        />
+      </div>
+    </div>
+    <BussinessAdd v-if="BussinessAddState.show"  @close="handleCancel" />
+    <BussinessEdit v-if="BussinessEditState.show" :event-id="BussinessEditState.eventId"  @close="handleCancel" />
+  </div>
+</template>
+
 <script setup lang="ts">
+import { ref,reactive, onMounted, onBeforeUnmount } from "vue";
+import {companyDelete, getCompanyList} from "@/api/riskPrevention/BusinessPortraits";
+import BussinessAdd from "@/views/riskPrevention/SafetyProductionManagement/BussinessAdd.vue";
+import BussinessEdit from "./BussinessEdit.vue";
+import {to} from "await-to-js";
 
-</script>
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const showSearch = ref(true);
+const tableData = ref();
+const multiple = ref(true);
+const ids = ref<Array<number | string>>([]);
+const single = ref(true);
+// 定义响应式变量
+const loading = ref(false);
+const maxHeight = ref(window.innerHeight * 0.8);
+const total = ref();
+// 处理窗口大小变化
+const handleResize = () => {
+  maxHeight.value = window.innerHeight * 0.8;
+};
+const initFormData = reactive({
+  company_name: '',
+  province: '',
+  city: '',
+  district: '',
+  company_address: '',
+  responsible_person: '',
+  phone: '',
+  company_type: ''
+});
+const data =reactive({
+  form: {...initFormData},
+  queryParams:{
+    page: '1',
+    pageSize: '10',
+    area_code: '',
+    keycode: ''
+  }
+})
 
-<template>
-<!--  企业画像-->
-</template>
+const { queryParams, form } = toRefs(data);
+
+const county = [
+  { value: '', label: '全部' },
+  { value: '0', label: '茂南区' },
+  { value: '1', label: '电白区' },
+  { value: '2', label: '高州市' },
+  { value: '3', label: '化州市' },
+  { value: '4', label: '信宜市' },
+];
+
+const handleQuery = () => {
+  queryParams.value.page = 1;
+  fetchWorkrData();
+};
+const resetQuery = () => {
+  queryParams.value = { page: 1, pageSize: 10, area_code: '', keycode: '' };
+  handleQuery();
+};
+const BussinessAddState = reactive({
+  show: false, // 初始化show为false
+});
+
+const BussinessEditState = reactive({
+  show:false
+});
+
+const handleAdd = () => {
+  BussinessAddState.show = true;
+};
+
+const handleDelete = async (row) => {
+  let id = [];
+  if (row) {
+    id = [row.id];
+  } else {
+    id = ids.value;
+  }
+  const [err] = await to(proxy?.$modal.confirm('是否确认删除选择的数据项?') as any);
+  if (!err) {
+    await companyDelete(id);
+    proxy.$modal.msgSuccess('删除成功');
+    fetchWorkrData();
+  }
+};
+const handleedit = (row) => {
+  BussinessEditState.eventId = row.id + "";
+  BussinessEditState.show = true;
+};
+
+const handleCancel = () => {
+  BussinessAddState.show = false;
+  BussinessEditState.show =false;
+};
+
+const fetchWorkrData = () => {
+  loading.value = true;
+  getCompanyList(queryParams.value)
+    .then((res) => {
+      tableData.value = res.data;
+      total.value = res.total;
+    })
+    .finally(() => {
+      loading.value = false;
+    });
+};
+
+const handleSelectionChange = (selection) => {
+  ids.value = selection.map((item) => item.id);
+  selectedRow.value = selection.length === 1 ? selection[0] : null;
+  single.value = selection.length != 1;
+  multiple.value = !selection.length;
+};
+
+onMounted(() => {
+  window.addEventListener('resize', handleResize);
+  fetchWorkrData();
+});
+
+// 在组件卸载前移除窗口大小变化监听器
+onBeforeUnmount(() => {
+  window.removeEventListener('resize', handleResize);
+
+});
+</script>
 
-<style scoped lang="scss">
+<style lang="scss" scoped></style>
 
-</style>

+ 121 - 0
src/views/riskPrevention/SafetyProductionManagement/BussinessAdd.vue

@@ -0,0 +1,121 @@
+<template>
+  <div class="app-container p-2">
+    <!-- 新增/修改弹窗 -->
+    <div class="common-dialog">
+      <div class="common-dialog-content">
+        <div class="common-dialog-title-box">
+          <i class="common-dialog-title-icon" />
+          <el-form-item>
+            <div class="back-btn" @click="goBack">
+              <el-icon><Back /></el-icon>
+              返回上一级
+            </div>
+          </el-form-item>
+          <div>新建企业</div>
+        </div>
+        <div class="common-dialog-box">
+          <el-form ref="demoFormRef" :model="form" label-width="100px" :rules="rules">
+            <el-form-item label="企业名称:" prop="company_name">
+              <el-input v-model="form.company_name" placeholder="请输入企业名称" />
+            </el-form-item>
+            <el-form-item label="辖区省:" prop="province">
+              <el-input v-model="form.province" placeholder="请输入辖区省" />
+            </el-form-item>
+            <el-form-item label="辖区市:" prop="city">
+              <el-input v-model="form.city" placeholder="请输入辖区市" />
+            </el-form-item>
+            <el-form-item label="辖区县:" prop="district">
+              <el-input v-model="form.district" placeholder="请输入辖区县" />
+            </el-form-item>
+            <el-form-item label="企业地址:" prop="company_address">
+              <el-input v-model="form.company_address" placeholder="请输入企业地址" />
+            </el-form-item>
+            <el-form-item label="企业负责人:" prop="responsible_person">
+              <el-input v-model="form.responsible_person" placeholder="请输入企业负责人" />
+            </el-form-item>
+            <el-form-item label="移动电话:" prop="phone">
+              <el-input v-model="form.phone" placeholder="请输入移动电话" />
+            </el-form-item>
+            <el-form-item label="企业类型:" prop="company_type">
+              <el-input v-model="form.company_type" placeholder="请输入企业类型" />
+            </el-form-item>
+          </el-form>
+        </div>
+        <div class="common-dialog-footer" style="display: flex; justify-content: center">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script setup lang="ts">
+import { ref } from 'vue';
+import {addCompany, updateCompany} from "@/api/riskPrevention/BusinessPortraits";
+const demoFormRef = ref(null);
+const buttonLoading = ref(false);
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const emits = defineEmits(['close']);
+let form = ref({
+  company_name: '',
+  province: '',
+  province_code: '0',
+  city: '',
+  city_code: '1',
+  district: '',
+  district_code: '2',
+  company_address: '',
+  responsible_person: '',
+  phone: '',
+  company_type: ''
+});
+
+// 表单验证规则
+const rules = ref({
+  company_name: [{ required: true, message: '请选择企业名称', trigger: 'blur' }],
+  province: [{ required: true, message: '请选择辖区省', trigger: 'change' }],
+  city: [{ required: true, message: '请选择辖区市', trigger: 'change' }],
+  district: [{ required: true, message: '请选择辖区县', trigger: 'change' }],
+  company_address: [{ required: true, message: '请选择企业地址', trigger: 'change' }],
+  responsible_person: [{ required: true, message: '请选择企业负责人', trigger: 'change' }],
+  phone: [{ required: true, message: '请选择手机号码', trigger: 'change' }],
+  company_type: [{ required: true, message: '请选择企业类型', trigger: 'change' }],
+});
+// 提交表单
+const submitForm = () => {
+
+  demoFormRef.value?.validate(async (valid) => {
+    if (valid) {
+      try {
+        buttonLoading.value = true;
+
+        form.value.task_number ? await updateCompany(form.value) : await addCompany(form.value);
+        proxy?.$modal.msgSuccess(form.value.task_number ? '修改成功' : '新增成功');
+        emits('refresh'); // 提交成功后通知父组件刷新
+        emits('close'); // 关闭弹窗
+      } finally {
+        buttonLoading.value = false;
+      }
+    }
+  });
+};
+// 重置表单数据和表单验证状态
+const resetForm = () => {
+  form.value = {
+    company_name: '',
+    province: '',
+    city: '',
+    district: '',
+    company_address: '',
+    responsible_person: '',
+    phone: '',
+    company_type: ''
+  };
+  demoFormRef.value?.resetFields(); // 重置表单的验证状态
+};
+
+const cancel = () => {
+  resetForm();
+  emits('close');
+};
+</script>

+ 113 - 0
src/views/riskPrevention/SafetyProductionManagement/BussinessEdit.vue

@@ -0,0 +1,113 @@
+<template>
+  <div class="app-container p-2">
+    <!-- 新增/修改弹窗 -->
+    <div class="common-dialog">
+      <div class="common-dialog-content">
+        <div class="common-dialog-title-box">
+          <i class="common-dialog-title-icon" />
+          <div>新建</div>
+        </div>
+        <div class="common-dialog-box">
+          <el-form ref="demoFormRef" :model="form" label-width="100px" :rules="rules">
+            <el-form-item label="企业名称:" prop="company_name">
+              <el-input v-model="form.company_name" placeholder="请输入企业名称" />
+            </el-form-item>
+            <el-form-item label="辖区省:" prop="province">
+              <el-input v-model="form.province" placeholder="请输入辖区省" />
+            </el-form-item>
+            <el-form-item label="辖区市:" prop="city">
+              <el-input v-model="form.city" placeholder="请输入辖区市" />
+            </el-form-item>
+            <el-form-item label="辖区县:" prop="district">
+              <el-input v-model="form.district" placeholder="请输入辖区县" />
+            </el-form-item>
+            <el-form-item label="企业地址:" prop="company_address">
+              <el-input v-model="form.company_address" placeholder="请输入企业地址" />
+            </el-form-item>
+            <el-form-item label="企业负责人:" prop="responsible_person">
+              <el-input v-model="form.responsible_person" placeholder="请输入企业负责人" />
+            </el-form-item>
+            <el-form-item label="移动电话:" prop="phone">
+              <el-input v-model="form.phone" placeholder="请输入移动电话" />
+            </el-form-item>
+            <el-form-item label="企业类型:" prop="company_type">
+              <el-input v-model="form.company_type" placeholder="请输入企业类型" />
+            </el-form-item>
+          </el-form>
+        </div>
+        <div class="common-dialog-footer" style="display: flex; justify-content: center">
+          <el-button type="primary" @click="submitForm">确 定</el-button>
+          <el-button @click="cancel">取 消</el-button>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+<script setup lang="ts">
+import { workDetail, updatetask } from '@/api/inspectionWork/inspector';
+import { ref, watch } from 'vue';
+import { ElMessage } from 'element-plus';
+import {CompanyDetail, updateCompany} from "@/api/riskPrevention/BusinessPortraits";
+const demoFormRef = ref(null);
+const buttonLoading = ref(false);
+const { proxy } = getCurrentInstance() as ComponentInternalInstance;
+const emit = defineEmits(['close']);
+const props = defineProps<{ eventId: string }>();
+let form = ref({
+  company_name: '',
+  province: '',
+  province_code: '0',
+  city: '',
+  city_code: '1',
+  district: '',
+  district_code: '2',
+  company_address: '',
+  responsible_person: '',
+  phone: '',
+  company_type: ''
+});
+// 巡查业务选项
+const businessOptions = [
+  { value: '0', label: '城市隐患巡查' },
+  { value: '1', label: '森林防火巡查' },
+  { value: '2', label: '重点危化企业巡查' },
+  { value: '3', label: '重点水库水位巡查' }
+];
+const fetchDetail = async () => {
+  const response = await CompanyDetail(props.eventId);
+  if (response.code === 200) {
+    form.value = response.data;
+  } else {
+    ElMessage.error(response.msg);
+  }
+};
+
+const rules = ref({
+  // id: [{ required: true, message: '主键不能为空', trigger: 'blur' }],
+});
+watch(
+  () => props.eventId,
+  (newVal) => {
+    if (newVal) {
+      fetchDetail();
+    }
+  },
+  { immediate: true }
+);
+const submitForm = async () => {
+  // 假设表单已经通过验证
+  const response = await updateCompany(form.value);
+  if (response.code === 200) {
+    ElMessage.success('提交成功');
+    emit('refresh'); // 提交成功后通知父组件刷新
+    emit('refreshParent'); // 提交成功后通知子任务组件刷新
+    cancel(); // 关闭弹窗
+  } else {
+    ElMessage.error(response.msg);
+  }
+};
+
+const cancel = () => {
+  emit('close');
+};
+</script>