소스 검색

feat(workStation): 新增油价管理和法律援助管理功能

- 在 fetch.js 中添加了与油价管理和法律援助相关的 API 接口
- 在 Aside.vue 中增加了油价管理和法律援助管理的菜单项
- 在 router/index.js 中添加了对应的路由
- 新增 oilPriceManage.vue 和 legalAidManage.vue 组件实现相关功能
wzg 10 달 전
부모
커밋
b124c3eb13
5개의 변경된 파일456개의 추가작업 그리고 0개의 파일을 삭제
  1. 25 0
      src/apis/fetch.js
  2. 8 0
      src/layout/Aside.vue
  3. 16 0
      src/router/index.js
  4. 142 0
      src/views/workStation/legalAidManage.vue
  5. 265 0
      src/views/workStation/oilPriceManage.vue

+ 25 - 0
src/apis/fetch.js

@@ -257,4 +257,29 @@ export default {
   getProvinceSelect() {
     return $http("/ship/province/select");
   },
+
+  // 删除油价信息
+  deleteFuel(data) {
+    return $http("/fuel/delete", data);
+  },
+
+  // 获取油价列表
+  getFuelList(data) {
+    return $http("/fuel/list", data);
+  },
+
+  // 修改油价信息
+  modifyFuel(data) {
+    return $http("/fuel/modify", data);
+  },
+
+  // 获取法律援助详情
+  getLegalAidRequestDetail(data) {
+    return $http("/legal/aid/request/detail", data);
+  },
+
+  // 获取法律援助列表
+  getLegalAidRequestList(data) {
+    return $http("/legal/aid/request/list", data);
+  },
 };

+ 8 - 0
src/layout/Aside.vue

@@ -128,6 +128,14 @@ let menu = [
         path: "/workStation/insuranceManage",
         name: "保险管理",
       },
+      {
+        path: "/workStation/oilPriceManage",
+        name: "油价管理",
+      },
+      {
+        path: "/workStation/legalAidManage",
+        name: "法律援助管理",
+      },
     ],
   },
 ];

+ 16 - 0
src/router/index.js

@@ -83,6 +83,22 @@ const router = createRouter({
       },
       component: () => import("../views/workStation/certsManage.vue"),
     },
+    {
+      path: "/workStation/oilPriceManage",
+      name: "oilPriceManage",
+      meta: {
+        title: "油价管理",
+      },
+      component: () => import("../views/workStation/oilPriceManage.vue"),
+    },
+    {
+      path: "/workStation/legalAidManage",
+      name: "legalAidManage",
+      meta: {
+        title: "法律援助管理",
+      },
+      component: () => import("../views/workStation/legalAidManage.vue"),
+    },
     {
       path: "/workStation/insuranceManage",
       name: "insuranceManage",

+ 142 - 0
src/views/workStation/legalAidManage.vue

@@ -0,0 +1,142 @@
+<template>
+  <div class="full-container-p24">
+    <div class="mb30 df aic">
+      <el-input
+        class="w200 mr10"
+        v-model="term"
+        placeholder="船名/船东姓名/联系电话"
+        clearable
+        @keyup.enter="getLegalAidRequestList"
+        @clear="getLegalAidRequestList"
+      />
+      <el-button type="primary" @click="getLegalAidRequestList">搜索</el-button>
+    </div>
+
+    <el-table border :data="tableData" stripe style="width: 100%">
+      <el-table-column align="center" type="index" label="序号" width="80" />
+      <el-table-column
+        align="center"
+        prop="shipName"
+        label="船名"
+        min-width="120"
+      />
+      <el-table-column
+        align="center"
+        prop="shipOwnerName"
+        label="船东姓名"
+        min-width="120"
+      />
+      <el-table-column
+        align="center"
+        prop="contactPhone"
+        label="联系电话"
+        min-width="120"
+      />
+      <el-table-column
+        align="center"
+        prop="requestContent"
+        label="援助内容"
+        min-width="200"
+      />
+      <el-table-column
+        align="center"
+        prop="createTime"
+        label="申请日期"
+        min-width="120"
+      >
+        <template v-slot="scope">
+          {{ subTimeStr(scope.row.createTime) }}
+        </template>
+      </el-table-column>
+      <el-table-column align="center" label="操作" width="120">
+        <template #default="scope">
+          <el-button type="primary" text @click="showDetail(scope.row)">
+            查看更多
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <div class="df aic jcfe mt40 mr20">
+      <el-pagination
+        :current-page="currentPage"
+        @current-change="pageChange"
+        background
+        layout="prev, pager, next"
+        :total="total"
+      />
+    </div>
+
+    <el-dialog v-model="dialogVisible" title="法律援助详情" width="400px">
+      <el-descriptions :column="1" border>
+        <el-descriptions-item width="40px" label="船名">
+          {{ currentRow.shipName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="船东姓名">
+          {{ currentRow.shipOwnerName }}
+        </el-descriptions-item>
+        <el-descriptions-item label="联系电话">
+          {{ currentRow.contactPhone }}
+        </el-descriptions-item>
+        <el-descriptions-item label="援助内容">
+          {{ currentRow.requestContent }}
+        </el-descriptions-item>
+        <el-descriptions-item label="申请日期">
+          {{ subTimeStr(currentRow.createTime) }}
+        </el-descriptions-item>
+      </el-descriptions>
+      <div class="df jcfe mt30">
+        <el-button type="primary" @click="dialogVisible = false">
+          关闭
+        </el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup>
+import { ref, onMounted } from "vue";
+import { ElMessage } from "element-plus";
+import api from "../../apis/fetch";
+import { subTimeStr } from "../../utils/utils";
+
+const tableData = ref([]);
+const total = ref(0);
+const currentPage = ref(1);
+const term = ref("");
+const dialogVisible = ref(false);
+const currentRow = ref({});
+
+async function getLegalAidRequestList() {
+  try {
+    const { data } = await api.getLegalAidRequestList({
+      currentPage: currentPage.value,
+      size: 10,
+      term: term.value,
+    });
+    if (data.status === 0) {
+      tableData.value = data.result;
+      total.value = data.total;
+    } else {
+      tableData.value = [];
+      total.value = 0;
+    }
+  } catch (error) {
+    ElMessage.error("获取数据失败");
+  }
+}
+
+function pageChange(page) {
+  currentPage.value = page;
+  getLegalAidRequestList();
+}
+
+function showDetail(row) {
+  currentRow.value = row;
+  dialogVisible.value = true;
+}
+
+onMounted(() => {
+  getLegalAidRequestList();
+});
+</script>

+ 265 - 0
src/views/workStation/oilPriceManage.vue

@@ -0,0 +1,265 @@
+<template>
+  <div class="full-container-p24">
+    <div class="mb30 df aic jcsb">
+      <div class="df aic">
+        <el-input
+          v-model="searchKey"
+          placeholder="请输入服务商/油型号"
+          class="w300"
+          @keyup.enter="handleSearch"
+          clearable
+          @clear="handleSearch"
+        />
+        <el-button class="ml10" type="primary" @click="handleSearch">
+          搜索
+        </el-button>
+      </div>
+      <el-button class="ml10" type="primary" @click="handleAdd">
+        新增油价
+      </el-button>
+    </div>
+
+    <el-table border :data="tableData" stripe>
+      <el-table-column type="index" label="序号" width="80" align="center" />
+      <el-table-column
+        prop="vendorName"
+        label="服务商"
+        min-width="150"
+        align="center"
+      />
+      <el-table-column
+        prop="fuelShipLongitude"
+        label="经度"
+        min-width="120"
+        align="center"
+      />
+      <el-table-column
+        prop="fuelShipLatitude"
+        label="纬度"
+        min-width="120"
+        align="center"
+      />
+      <el-table-column
+        prop="fuelModel"
+        label="油型号"
+        min-width="150"
+        align="center"
+      />
+      <el-table-column
+        prop="price"
+        label="价格(元/吨)"
+        min-width="150"
+        align="center"
+      />
+      <el-table-column
+        prop="priceDate"
+        label="发布日期"
+        min-width="150"
+        align="center"
+      >
+        <template v-slot="scope">
+          {{ subTimeStr(scope.row.priceDate) }}
+        </template>
+      </el-table-column>
+
+      <el-table-column label="操作" width="180" align="center">
+        <template #default="scope">
+          <el-button type="primary" text @click="handleEdit(scope.row)">
+            修改
+          </el-button>
+          <el-button type="danger" text @click="deleteFuel(scope.row)">
+            删除
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <div class="df aic jcfe mt40 mr20">
+      <el-pagination
+        background
+        layout="prev, pager, next"
+        :current-page="currentPage"
+        :total="total"
+        @current-change="pageChange"
+      />
+    </div>
+
+    <el-dialog v-model="dialogVisible" :title="dialogTitle" width="450">
+      <el-form
+        ref="formRef"
+        :model="formData"
+        :rules="rules"
+        label-width="120px"
+      >
+        <el-form-item label="服务商" prop="vendorName">
+          <el-input v-model="formData.vendorName" class="w200" />
+        </el-form-item>
+        <el-form-item label="经度" prop="fuelShipLongitude">
+          <el-input v-model="formData.fuelShipLongitude" class="w200" />
+        </el-form-item>
+        <el-form-item label="纬度" prop="fuelShipLatitude">
+          <el-input v-model="formData.fuelShipLatitude" class="w200" />
+        </el-form-item>
+        <el-form-item label="油型号" prop="fuelModel">
+          <el-input v-model="formData.fuelModel" class="w200" />
+        </el-form-item>
+        <el-form-item label="价格" prop="price">
+          <el-input v-model="formData.price" class="w200">
+            <template #append>元/吨</template>
+          </el-input>
+        </el-form-item>
+        <el-form-item label="发布日期" prop="priceDate">
+          <el-date-picker
+            v-model="formData.priceDate"
+            type="date"
+            value-format="YYYY-MM-DD HH:mm:ss"
+            placeholder="选择日期"
+          />
+        </el-form-item>
+      </el-form>
+
+      <template #footer>
+        <el-button @click="dialogVisible = false">取消</el-button>
+        <el-button type="primary" @click="modifyFuel">确定</el-button>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script setup>
+import { ref, reactive } from "vue";
+import { ElMessage, ElMessageBox } from "element-plus";
+import api from "../../apis/fetch";
+import { subTimeStr } from "../../utils/utils";
+
+const searchKey = ref("");
+const currentPage = ref(1);
+const total = ref(0);
+const tableData = ref([]);
+
+const dialogVisible = ref(false);
+const dialogTitle = ref("新增油价");
+const formRef = ref(null);
+const formData = reactive({
+  fuelId: 0,
+  vendorName: "",
+  fuelShipLongitude: "",
+  fuelShipLatitude: "",
+  fuelModel: "",
+  price: "",
+  priceDate: "",
+});
+
+const rules = reactive({
+  vendorName: [
+    { required: true, message: "请输入服务商名称", trigger: "blur" },
+  ],
+  fuelShipLongitude: [
+    { required: true, message: "请输入经度", trigger: "blur" },
+  ],
+  fuelShipLatitude: [
+    { required: true, message: "请输入纬度", trigger: "blur" },
+  ],
+  fuelModel: [{ required: true, message: "请输入油型号", trigger: "blur" }],
+  price: [{ required: true, message: "请输入价格", trigger: "blur" }],
+  priceDate: [{ required: true, message: "请选择发布日期", trigger: "change" }],
+});
+
+// 获取油价列表
+async function getFuelList() {
+  try {
+    const { data } = await api.getFuelList({
+      term: searchKey.value,
+      currentPage: currentPage.value,
+      size: 10,
+    });
+    if (data.status === 0) {
+      tableData.value = data.result;
+      total.value = data.total;
+    }
+  } catch (error) {
+    ElMessage.error("获取数据失败");
+  }
+}
+
+// 分页切换
+function pageChange(page) {
+  currentPage.value = page;
+  getFuelList();
+}
+
+// 搜索
+function handleSearch() {
+  currentPage.value = 1;
+  getFuelList();
+}
+
+// 新增
+function handleAdd() {
+  dialogTitle.value = "新增油价";
+  Object.keys(formData).forEach((key) => {
+    if (key !== "fuelId") formData[key] = "";
+  });
+  formData.fuelId = 0;
+  dialogVisible.value = true;
+}
+
+// 编辑
+function handleEdit(row) {
+  dialogTitle.value = "修改油价";
+  Object.keys(formData).forEach((key) => {
+    formData[key] = row[key];
+  });
+  formData.fuelId = row.id;
+  dialogVisible.value = true;
+}
+
+// 提交表单
+async function modifyFuel() {
+  try {
+    await formRef.value.validate();
+    const { data } = await api.modifyFuel(formData);
+    if (data.status === 0) {
+      ElMessage.success("操作成功");
+      dialogVisible.value = false;
+      getFuelList();
+    }
+  } catch (error) {
+    console.error(error);
+  }
+}
+
+// 删除
+function deleteFuel(row) {
+  ElMessageBox.confirm("确认删除该油价信息?", "警告", {
+    confirmButtonText: "确认",
+    cancelButtonText: "取消",
+    type: "warning",
+  }).then(async () => {
+    try {
+      const { data } = await api.deleteFuel({
+        fuelId: row.id,
+        choiceCompanyId: 0,
+      });
+      if (data.status === 0) {
+        ElMessage.success("删除成功");
+        getFuelList();
+      }
+    } catch (error) {
+      ElMessage.error("删除失败");
+    }
+  });
+}
+
+// 初始化获取数据
+getFuelList();
+</script>
+
+<style scoped>
+.w300 {
+  width: 300px;
+}
+.ml10 {
+  margin-left: 10px;
+}
+</style>