Преглед на файлове

feat: 业务代码初始化;

hanchaolong преди 2 седмици
родител
ревизия
dc2fbd80d8

+ 44 - 0
jd-logistics-ui-v3/src/api/logistics/adjustmentRecord.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询调账流水记录列表
+export function listAdjustmentRecord(query) {
+  return request({
+    url: '/system/adjustmentRecord/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询调账流水记录详细
+export function getAdjustmentRecord(financialAdjustId) {
+  return request({
+    url: '/system/adjustmentRecord/' + financialAdjustId,
+    method: 'get'
+  })
+}
+
+// 新增调账流水记录
+export function addAdjustmentRecord(data) {
+  return request({
+    url: '/system/adjustmentRecord',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改调账流水记录
+export function updateAdjustmentRecord(data) {
+  return request({
+    url: '/system/adjustmentRecord',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除调账流水记录
+export function delAdjustmentRecord(financialAdjustId) {
+  return request({
+    url: '/system/adjustmentRecord/' + financialAdjustId,
+    method: 'delete'
+  })
+}

+ 44 - 0
jd-logistics-ui-v3/src/api/logistics/banner.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询系统轮播图列表
+export function listBanner(query) {
+  return request({
+    url: '/system/banner/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询系统轮播图详细
+export function getBanner(bannerId) {
+  return request({
+    url: '/system/banner/' + bannerId,
+    method: 'get'
+  })
+}
+
+// 新增系统轮播图
+export function addBanner(data) {
+  return request({
+    url: '/system/banner',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改系统轮播图
+export function updateBanner(data) {
+  return request({
+    url: '/system/banner',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除系统轮播图
+export function delBanner(bannerId) {
+  return request({
+    url: '/system/banner/' + bannerId,
+    method: 'delete'
+  })
+}

+ 44 - 0
jd-logistics-ui-v3/src/api/logistics/book.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询地址簿管理列表
+export function listBook(query) {
+  return request({
+    url: '/system/book/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询地址簿管理详细
+export function getBook(addressId) {
+  return request({
+    url: '/system/book/' + addressId,
+    method: 'get'
+  })
+}
+
+// 新增地址簿管理
+export function addBook(data) {
+  return request({
+    url: '/system/book',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改地址簿管理
+export function updateBook(data) {
+  return request({
+    url: '/system/book',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除地址簿管理
+export function delBook(addressId) {
+  return request({
+    url: '/system/book/' + addressId,
+    method: 'delete'
+  })
+}

+ 44 - 0
jd-logistics-ui-v3/src/api/logistics/city.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询城市管理列表
+export function listCity(query) {
+  return request({
+    url: '/system/city/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询城市管理详细
+export function getCity(id) {
+  return request({
+    url: '/system/city/' + id,
+    method: 'get'
+  })
+}
+
+// 新增城市管理
+export function addCity(data) {
+  return request({
+    url: '/system/city',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改城市管理
+export function updateCity(data) {
+  return request({
+    url: '/system/city',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除城市管理
+export function delCity(id) {
+  return request({
+    url: '/system/city/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
jd-logistics-ui-v3/src/api/logistics/costDetails.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询运单明细列表
+export function listCostDetails(query) {
+  return request({
+    url: '/system/costDetails/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询运单明细详细
+export function getCostDetails(waybillDetailId) {
+  return request({
+    url: '/system/costDetails/' + waybillDetailId,
+    method: 'get'
+  })
+}
+
+// 新增运单明细
+export function addCostDetails(data) {
+  return request({
+    url: '/system/costDetails',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改运单明细
+export function updateCostDetails(data) {
+  return request({
+    url: '/system/costDetails',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除运单明细
+export function delCostDetails(waybillDetailId) {
+  return request({
+    url: '/system/costDetails/' + waybillDetailId,
+    method: 'delete'
+  })
+}

+ 44 - 0
jd-logistics-ui-v3/src/api/logistics/dept.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询部门列表
+export function listDept(query) {
+  return request({
+    url: '/system/dept/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询部门详细
+export function getDept(deptId) {
+  return request({
+    url: '/system/dept/' + deptId,
+    method: 'get'
+  })
+}
+
+// 新增部门
+export function addDept(data) {
+  return request({
+    url: '/system/dept',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改部门
+export function updateDept(data) {
+  return request({
+    url: '/system/dept',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除部门
+export function delDept(deptId) {
+  return request({
+    url: '/system/dept/' + deptId,
+    method: 'delete'
+  })
+}

+ 44 - 0
jd-logistics-ui-v3/src/api/logistics/inancialFee.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询费用类型管理列表
+export function listInancialFee(query) {
+  return request({
+    url: '/system/inancialFee/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询费用类型管理详细
+export function getInancialFee(feeItemId) {
+  return request({
+    url: '/system/inancialFee/' + feeItemId,
+    method: 'get'
+  })
+}
+
+// 新增费用类型管理
+export function addInancialFee(data) {
+  return request({
+    url: '/system/inancialFee',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改费用类型管理
+export function updateInancialFee(data) {
+  return request({
+    url: '/system/inancialFee',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除费用类型管理
+export function delInancialFee(feeItemId) {
+  return request({
+    url: '/system/inancialFee/' + feeItemId,
+    method: 'delete'
+  })
+}

+ 44 - 0
jd-logistics-ui-v3/src/api/logistics/monthSummary.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询财务月度汇总列表
+export function listMonthSummary(query) {
+  return request({
+    url: '/system/monthSummary/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询财务月度汇总详细
+export function getMonthSummary(summaryId) {
+  return request({
+    url: '/system/monthSummary/' + summaryId,
+    method: 'get'
+  })
+}
+
+// 新增财务月度汇总
+export function addMonthSummary(data) {
+  return request({
+    url: '/system/monthSummary',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改财务月度汇总
+export function updateMonthSummary(data) {
+  return request({
+    url: '/system/monthSummary',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除财务月度汇总
+export function delMonthSummary(summaryId) {
+  return request({
+    url: '/system/monthSummary/' + summaryId,
+    method: 'delete'
+  })
+}

+ 44 - 0
jd-logistics-ui-v3/src/api/logistics/order.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询运单管理列表
+export function listOrder(query) {
+  return request({
+    url: '/system/order/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询运单管理详细
+export function getOrder(waybillId) {
+  return request({
+    url: '/system/order/' + waybillId,
+    method: 'get'
+  })
+}
+
+// 新增运单管理
+export function addOrder(data) {
+  return request({
+    url: '/system/order',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改运单管理
+export function updateOrder(data) {
+  return request({
+    url: '/system/order',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除运单管理
+export function delOrder(waybillId) {
+  return request({
+    url: '/system/order/' + waybillId,
+    method: 'delete'
+  })
+}

+ 341 - 0
jd-logistics-ui-v3/src/views/logistics/adjustmentRecord/index.vue

@@ -0,0 +1,341 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="运单号" prop="waybillNo">
+        <el-input
+          v-model="queryParams.waybillNo"
+          placeholder="请输入运单号"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="费用明细id" prop="waybillCostDetailId">
+        <el-input
+          v-model="queryParams.waybillCostDetailId"
+          placeholder="请输入费用明细id"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="原金额" prop="originalAmount">
+        <el-input
+          v-model="queryParams.originalAmount"
+          placeholder="请输入原金额"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="调整后金额" prop="adjustedAmount">
+        <el-input
+          v-model="queryParams.adjustedAmount"
+          placeholder="请输入调整后金额"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="调整金额" prop="adjustmentAmount">
+        <el-input
+          v-model="queryParams.adjustmentAmount"
+          placeholder="请输入调整金额"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="调账原因" prop="adjustmentReason">
+        <el-input
+          v-model="queryParams.adjustmentReason"
+          placeholder="请输入调账原因"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="部门ID" prop="deptId">
+        <el-input
+          v-model="queryParams.deptId"
+          placeholder="请输入部门ID"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="用户ID" prop="userId">
+        <el-input
+          v-model="queryParams.userId"
+          placeholder="请输入用户ID"
+          clearable
+          @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="['system:adjustmentRecord:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="Edit"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:adjustmentRecord:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="Delete"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:adjustmentRecord:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="Download"
+          @click="handleExport"
+          v-hasPermi="['system:adjustmentRecord:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="adjustmentRecordList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="调账流水id" align="center" prop="financialAdjustId" />
+      <el-table-column label="运单号" align="center" prop="waybillNo" />
+      <el-table-column label="费用明细id" align="center" prop="waybillCostDetailId" />
+      <el-table-column label="调账类型" align="center" prop="adjustmentType" />
+      <el-table-column label="原金额" align="center" prop="originalAmount" />
+      <el-table-column label="调整后金额" align="center" prop="adjustedAmount" />
+      <el-table-column label="调整金额" align="center" prop="adjustmentAmount" />
+      <el-table-column label="调账原因" align="center" prop="adjustmentReason" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="部门ID" align="center" prop="deptId" />
+      <el-table-column label="用户ID" align="center" prop="userId" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:adjustmentRecord:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:adjustmentRecord:remove']">删除</el-button>
+        </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="500px" append-to-body>
+      <el-form ref="adjustmentRecordRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="运单号" prop="waybillNo">
+          <el-input v-model="form.waybillNo" placeholder="请输入运单号" />
+        </el-form-item>
+        <el-form-item label="费用明细id" prop="waybillCostDetailId">
+          <el-input v-model="form.waybillCostDetailId" placeholder="请输入费用明细id" />
+        </el-form-item>
+        <el-form-item label="原金额" prop="originalAmount">
+          <el-input v-model="form.originalAmount" placeholder="请输入原金额" />
+        </el-form-item>
+        <el-form-item label="调整后金额" prop="adjustedAmount">
+          <el-input v-model="form.adjustedAmount" placeholder="请输入调整后金额" />
+        </el-form-item>
+        <el-form-item label="调整金额" prop="adjustmentAmount">
+          <el-input v-model="form.adjustmentAmount" placeholder="请输入调整金额" />
+        </el-form-item>
+        <el-form-item label="调账原因" prop="adjustmentReason">
+          <el-input v-model="form.adjustmentReason" placeholder="请输入调账原因" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入备注" />
+        </el-form-item>
+        <el-form-item label="部门ID" prop="deptId">
+          <el-input v-model="form.deptId" placeholder="请输入部门ID" />
+        </el-form-item>
+        <el-form-item label="用户ID" prop="userId">
+          <el-input v-model="form.userId" placeholder="请输入用户ID" />
+        </el-form-item>
+        <el-form-item label="删除标志" prop="delFlag">
+          <el-input v-model="form.delFlag" 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="AdjustmentRecord">
+import { listAdjustmentRecord, getAdjustmentRecord, delAdjustmentRecord, addAdjustmentRecord, updateAdjustmentRecord } from "@/api/logistics/adjustmentRecord"
+
+const { proxy } = getCurrentInstance()
+
+const adjustmentRecordList = 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 data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    waybillNo: null,
+    waybillCostDetailId: null,
+    adjustmentType: null,
+    originalAmount: null,
+    adjustedAmount: null,
+    adjustmentAmount: null,
+    adjustmentReason: null,
+    deptId: null,
+    userId: null,
+  },
+  rules: {
+  }
+})
+
+const { queryParams, form, rules } = toRefs(data)
+
+/** 查询调账流水记录列表 */
+function getList() {
+  loading.value = true
+  listAdjustmentRecord(queryParams.value).then(response => {
+    adjustmentRecordList.value = response.rows
+    total.value = response.total
+    loading.value = false
+  })
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false
+  reset()
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    financialAdjustId: null,
+    waybillNo: null,
+    waybillCostDetailId: null,
+    adjustmentType: null,
+    originalAmount: null,
+    adjustedAmount: null,
+    adjustmentAmount: null,
+    adjustmentReason: null,
+    createTime: null,
+    updateTime: null,
+    remark: null,
+    deptId: null,
+    userId: null,
+    delFlag: null,
+    createBy: null,
+    updateBy: null
+  }
+  proxy.resetForm("adjustmentRecordRef")
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef")
+  handleQuery()
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.financialAdjustId)
+  single.value = selection.length != 1
+  multiple.value = !selection.length
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset()
+  open.value = true
+  title.value = "添加调账流水记录"
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  reset()
+  const _financialAdjustId = row.financialAdjustId || ids.value
+  getAdjustmentRecord(_financialAdjustId).then(response => {
+    form.value = response.data
+    open.value = true
+    title.value = "修改调账流水记录"
+  })
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["adjustmentRecordRef"].validate(valid => {
+    if (valid) {
+      if (form.value.financialAdjustId != null) {
+        updateAdjustmentRecord(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功")
+          open.value = false
+          getList()
+        })
+      } else {
+        addAdjustmentRecord(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功")
+          open.value = false
+          getList()
+        })
+      }
+    }
+  })
+}
+
+/** 删除按钮操作 */
+function handleDelete(row) {
+  const _financialAdjustIds = row.financialAdjustId || ids.value
+  proxy.$modal.confirm('是否确认删除调账流水记录编号为"' + _financialAdjustIds + '"的数据项?').then(function() {
+    return delAdjustmentRecord(_financialAdjustIds)
+  }).then(() => {
+    getList()
+    proxy.$modal.msgSuccess("删除成功")
+  }).catch(() => {})
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('system/adjustmentRecord/export', {
+    ...queryParams.value
+  }, `adjustmentRecord_${new Date().getTime()}.xlsx`)
+}
+
+getList()
+</script>

+ 330 - 0
jd-logistics-ui-v3/src/views/logistics/banner/index.vue

@@ -0,0 +1,330 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="轮播图名称" prop="bannerName">
+        <el-input
+          v-model="queryParams.bannerName"
+          placeholder="请输入轮播图名称"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="图片存储路径" prop="imageUrl">
+        <el-input
+          v-model="queryParams.imageUrl"
+          placeholder="请输入图片存储路径"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="点击图片时跳转的链接" prop="linkUrl">
+        <el-input
+          v-model="queryParams.linkUrl"
+          placeholder="请输入点击图片时跳转的链接"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="排序值" prop="sortOrder">
+        <el-input
+          v-model="queryParams.sortOrder"
+          placeholder="请输入排序值"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="是否激活显示 0表示不显示,1表示显示" prop="isActive">
+        <el-input
+          v-model="queryParams.isActive"
+          placeholder="请输入是否激活显示 0表示不显示,1表示显示"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="部门id" prop="deptId">
+        <el-input
+          v-model="queryParams.deptId"
+          placeholder="请输入部门id"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="用户id" prop="userId">
+        <el-input
+          v-model="queryParams.userId"
+          placeholder="请输入用户id"
+          clearable
+          @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="['system:banner:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="Edit"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:banner:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="Delete"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:banner:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="Download"
+          @click="handleExport"
+          v-hasPermi="['system:banner:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="bannerList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="轮播图id" align="center" prop="bannerId" />
+      <el-table-column label="轮播图名称" align="center" prop="bannerName" />
+      <el-table-column label="图片存储路径" align="center" prop="imageUrl" />
+      <el-table-column label="点击图片时跳转的链接" align="center" prop="linkUrl" />
+      <el-table-column label="排序值" align="center" prop="sortOrder" />
+      <el-table-column label="是否激活显示 0表示不显示,1表示显示" align="center" prop="isActive" />
+      <el-table-column label="系统类型 0管理端 1小程序" align="center" prop="sysType" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="部门id" align="center" prop="deptId" />
+      <el-table-column label="用户id" align="center" prop="userId" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:banner:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:banner:remove']">删除</el-button>
+        </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="500px" append-to-body>
+      <el-form ref="bannerRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="轮播图名称" prop="bannerName">
+          <el-input v-model="form.bannerName" placeholder="请输入轮播图名称" />
+        </el-form-item>
+        <el-form-item label="图片存储路径" prop="imageUrl">
+          <el-input v-model="form.imageUrl" placeholder="请输入图片存储路径" />
+        </el-form-item>
+        <el-form-item label="点击图片时跳转的链接" prop="linkUrl">
+          <el-input v-model="form.linkUrl" placeholder="请输入点击图片时跳转的链接" />
+        </el-form-item>
+        <el-form-item label="排序值" prop="sortOrder">
+          <el-input v-model="form.sortOrder" placeholder="请输入排序值" />
+        </el-form-item>
+        <el-form-item label="是否激活显示 0表示不显示,1表示显示" prop="isActive">
+          <el-input v-model="form.isActive" placeholder="请输入是否激活显示 0表示不显示,1表示显示" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入备注" />
+        </el-form-item>
+        <el-form-item label="删除标志" prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="请输入删除标志" />
+        </el-form-item>
+        <el-form-item label="部门id" prop="deptId">
+          <el-input v-model="form.deptId" placeholder="请输入部门id" />
+        </el-form-item>
+        <el-form-item label="用户id" prop="userId">
+          <el-input v-model="form.userId" placeholder="请输入用户id" />
+        </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="Banner">
+import { listBanner, getBanner, delBanner, addBanner, updateBanner } from "@/api/logistics/banner"
+
+const { proxy } = getCurrentInstance()
+
+const bannerList = 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 data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    bannerName: null,
+    imageUrl: null,
+    linkUrl: null,
+    sortOrder: null,
+    isActive: null,
+    sysType: null,
+    deptId: null,
+    userId: null
+  },
+  rules: {
+    isActive: [
+      { required: true, message: "是否激活显示 0表示不显示,1表示显示不能为空", trigger: "blur" }
+    ],
+  }
+})
+
+const { queryParams, form, rules } = toRefs(data)
+
+/** 查询系统轮播图列表 */
+function getList() {
+  loading.value = true
+  listBanner(queryParams.value).then(response => {
+    bannerList.value = response.rows
+    total.value = response.total
+    loading.value = false
+  })
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false
+  reset()
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    bannerId: null,
+    bannerName: null,
+    imageUrl: null,
+    linkUrl: null,
+    sortOrder: null,
+    isActive: null,
+    sysType: null,
+    remark: null,
+    delFlag: null,
+    createTime: null,
+    updateTime: null,
+    createBy: null,
+    updateBy: null,
+    deptId: null,
+    userId: null
+  }
+  proxy.resetForm("bannerRef")
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef")
+  handleQuery()
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.bannerId)
+  single.value = selection.length != 1
+  multiple.value = !selection.length
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset()
+  open.value = true
+  title.value = "添加系统轮播图"
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  reset()
+  const _bannerId = row.bannerId || ids.value
+  getBanner(_bannerId).then(response => {
+    form.value = response.data
+    open.value = true
+    title.value = "修改系统轮播图"
+  })
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["bannerRef"].validate(valid => {
+    if (valid) {
+      if (form.value.bannerId != null) {
+        updateBanner(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功")
+          open.value = false
+          getList()
+        })
+      } else {
+        addBanner(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功")
+          open.value = false
+          getList()
+        })
+      }
+    }
+  })
+}
+
+/** 删除按钮操作 */
+function handleDelete(row) {
+  const _bannerIds = row.bannerId || ids.value
+  proxy.$modal.confirm('是否确认删除系统轮播图编号为"' + _bannerIds + '"的数据项?').then(function() {
+    return delBanner(_bannerIds)
+  }).then(() => {
+    getList()
+    proxy.$modal.msgSuccess("删除成功")
+  }).catch(() => {})
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('system/banner/export', {
+    ...queryParams.value
+  }, `banner_${new Date().getTime()}.xlsx`)
+}
+
+getList()
+</script>

+ 366 - 0
jd-logistics-ui-v3/src/views/logistics/book/index.vue

@@ -0,0 +1,366 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="公司名称" prop="companyName">
+        <el-input
+          v-model="queryParams.companyName"
+          placeholder="请输入公司名称"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="联系人姓名" prop="contactName">
+        <el-input
+          v-model="queryParams.contactName"
+          placeholder="请输入联系人姓名"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="联系人电话" prop="contactPhone">
+        <el-input
+          v-model="queryParams.contactPhone"
+          placeholder="请输入联系人电话"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="省" prop="provinceName">
+        <el-input
+          v-model="queryParams.provinceName"
+          placeholder="请输入省"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="市" prop="cityName">
+        <el-input
+          v-model="queryParams.cityName"
+          placeholder="请输入市"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="区/县" prop="countyName">
+        <el-input
+          v-model="queryParams.countyName"
+          placeholder="请输入区/县"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="详细地址" prop="detailedAddress">
+        <el-input
+          v-model="queryParams.detailedAddress"
+          placeholder="请输入详细地址"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="是否默认 0非默认1默认" prop="defaultFlag">
+        <el-input
+          v-model="queryParams.defaultFlag"
+          placeholder="请输入是否默认 0非默认1默认"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="部门ID" prop="deptId">
+        <el-input
+          v-model="queryParams.deptId"
+          placeholder="请输入部门ID"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="用户ID" prop="userId">
+        <el-input
+          v-model="queryParams.userId"
+          placeholder="请输入用户ID"
+          clearable
+          @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="['system:book:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="Edit"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:book:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="Delete"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:book:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="Download"
+          @click="handleExport"
+          v-hasPermi="['system:book:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="bookList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="地址薄id" align="center" prop="addressId" />
+      <el-table-column label="公司名称" align="center" prop="companyName" />
+      <el-table-column label="联系人姓名" align="center" prop="contactName" />
+      <el-table-column label="联系人电话" align="center" prop="contactPhone" />
+      <el-table-column label="省" align="center" prop="provinceName" />
+      <el-table-column label="市" align="center" prop="cityName" />
+      <el-table-column label="区/县" align="center" prop="countyName" />
+      <el-table-column label="详细地址" align="center" prop="detailedAddress" />
+      <el-table-column label="是否默认 0非默认1默认" align="center" prop="defaultFlag" />
+      <el-table-column label="部门ID" align="center" prop="deptId" />
+      <el-table-column label="用户ID" align="center" prop="userId" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:book:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:book:remove']">删除</el-button>
+        </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="500px" append-to-body>
+      <el-form ref="bookRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="公司名称" prop="companyName">
+          <el-input v-model="form.companyName" placeholder="请输入公司名称" />
+        </el-form-item>
+        <el-form-item label="联系人姓名" prop="contactName">
+          <el-input v-model="form.contactName" placeholder="请输入联系人姓名" />
+        </el-form-item>
+        <el-form-item label="联系人电话" prop="contactPhone">
+          <el-input v-model="form.contactPhone" placeholder="请输入联系人电话" />
+        </el-form-item>
+        <el-form-item label="省" prop="provinceName">
+          <el-input v-model="form.provinceName" placeholder="请输入省" />
+        </el-form-item>
+        <el-form-item label="市" prop="cityName">
+          <el-input v-model="form.cityName" placeholder="请输入市" />
+        </el-form-item>
+        <el-form-item label="区/县" prop="countyName">
+          <el-input v-model="form.countyName" placeholder="请输入区/县" />
+        </el-form-item>
+        <el-form-item label="详细地址" prop="detailedAddress">
+          <el-input v-model="form.detailedAddress" placeholder="请输入详细地址" />
+        </el-form-item>
+        <el-form-item label="是否默认 0非默认1默认" prop="defaultFlag">
+          <el-input v-model="form.defaultFlag" placeholder="请输入是否默认 0非默认1默认" />
+        </el-form-item>
+        <el-form-item label="部门ID" prop="deptId">
+          <el-input v-model="form.deptId" placeholder="请输入部门ID" />
+        </el-form-item>
+        <el-form-item label="用户ID" prop="userId">
+          <el-input v-model="form.userId" placeholder="请输入用户ID" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入备注" />
+        </el-form-item>
+        <el-form-item label="删除标志" prop="delFlag">
+          <el-input v-model="form.delFlag" 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="Book">
+import { listBook, getBook, delBook, addBook, updateBook } from "@/api/logistics/book"
+
+const { proxy } = getCurrentInstance()
+
+const bookList = 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 data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    companyName: null,
+    contactName: null,
+    contactPhone: null,
+    provinceName: null,
+    cityName: null,
+    countyName: null,
+    detailedAddress: null,
+    defaultFlag: null,
+    deptId: null,
+    userId: null,
+  },
+  rules: {
+  }
+})
+
+const { queryParams, form, rules } = toRefs(data)
+
+/** 查询地址簿管理列表 */
+function getList() {
+  loading.value = true
+  listBook(queryParams.value).then(response => {
+    bookList.value = response.rows
+    total.value = response.total
+    loading.value = false
+  })
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false
+  reset()
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    addressId: null,
+    companyName: null,
+    contactName: null,
+    contactPhone: null,
+    provinceName: null,
+    cityName: null,
+    countyName: null,
+    detailedAddress: null,
+    defaultFlag: null,
+    deptId: null,
+    userId: null,
+    remark: null,
+    delFlag: null,
+    createTime: null,
+    updateTime: null,
+    createBy: null,
+    updateBy: null
+  }
+  proxy.resetForm("bookRef")
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef")
+  handleQuery()
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.addressId)
+  single.value = selection.length != 1
+  multiple.value = !selection.length
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset()
+  open.value = true
+  title.value = "添加地址簿管理"
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  reset()
+  const _addressId = row.addressId || ids.value
+  getBook(_addressId).then(response => {
+    form.value = response.data
+    open.value = true
+    title.value = "修改地址簿管理"
+  })
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["bookRef"].validate(valid => {
+    if (valid) {
+      if (form.value.addressId != null) {
+        updateBook(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功")
+          open.value = false
+          getList()
+        })
+      } else {
+        addBook(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功")
+          open.value = false
+          getList()
+        })
+      }
+    }
+  })
+}
+
+/** 删除按钮操作 */
+function handleDelete(row) {
+  const _addressIds = row.addressId || ids.value
+  proxy.$modal.confirm('是否确认删除地址簿管理编号为"' + _addressIds + '"的数据项?').then(function() {
+    return delBook(_addressIds)
+  }).then(() => {
+    getList()
+    proxy.$modal.msgSuccess("删除成功")
+  }).catch(() => {})
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('system/book/export', {
+    ...queryParams.value
+  }, `book_${new Date().getTime()}.xlsx`)
+}
+
+getList()
+</script>

+ 385 - 0
jd-logistics-ui-v3/src/views/logistics/city/index.vue

@@ -0,0 +1,385 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="城市id" prop="cityId">
+        <el-input
+          v-model="queryParams.cityId"
+          placeholder="请输入城市id"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="省市级别" prop="level">
+        <el-input
+          v-model="queryParams.level"
+          placeholder="请输入省市级别"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="父级id" prop="parentId">
+        <el-input
+          v-model="queryParams.parentId"
+          placeholder="请输入父级id"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="区号" prop="areaCode">
+        <el-input
+          v-model="queryParams.areaCode"
+          placeholder="请输入区号"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="名称" prop="name">
+        <el-input
+          v-model="queryParams.name"
+          placeholder="请输入名称"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="合并名称" prop="mergerName">
+        <el-input
+          v-model="queryParams.mergerName"
+          placeholder="请输入合并名称"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="经度" prop="lng">
+        <el-input
+          v-model="queryParams.lng"
+          placeholder="请输入经度"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="纬度" prop="lat">
+        <el-input
+          v-model="queryParams.lat"
+          placeholder="请输入纬度"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="是否展示" prop="isShow">
+        <el-input
+          v-model="queryParams.isShow"
+          placeholder="请输入是否展示"
+          clearable
+          @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="['system:city:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="Edit"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:city:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="Delete"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:city:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="Download"
+          @click="handleExport"
+          v-hasPermi="['system:city:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="cityList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="id" align="center" prop="id" />
+      <el-table-column label="城市id" align="center" prop="cityId" />
+      <el-table-column label="省市级别" align="center" prop="level" />
+      <el-table-column label="父级id" align="center" prop="parentId" />
+      <el-table-column label="区号" align="center" prop="areaCode" />
+      <el-table-column label="名称" align="center" prop="name" />
+      <el-table-column label="合并名称" align="center" prop="mergerName" />
+      <el-table-column label="经度" align="center" prop="lng" />
+      <el-table-column label="纬度" align="center" prop="lat" />
+      <el-table-column label="是否展示" align="center" prop="isShow" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:city:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:city:remove']">删除</el-button>
+        </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="500px" append-to-body>
+      <el-form ref="cityRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="城市id" prop="cityId">
+          <el-input v-model="form.cityId" placeholder="请输入城市id" />
+        </el-form-item>
+        <el-form-item label="省市级别" prop="level">
+          <el-input v-model="form.level" placeholder="请输入省市级别" />
+        </el-form-item>
+        <el-form-item label="父级id" prop="parentId">
+          <el-input v-model="form.parentId" placeholder="请输入父级id" />
+        </el-form-item>
+        <el-form-item label="区号" prop="areaCode">
+          <el-input v-model="form.areaCode" placeholder="请输入区号" />
+        </el-form-item>
+        <el-form-item label="名称" prop="name">
+          <el-input v-model="form.name" placeholder="请输入名称" />
+        </el-form-item>
+        <el-form-item label="合并名称" prop="mergerName">
+          <el-input v-model="form.mergerName" placeholder="请输入合并名称" />
+        </el-form-item>
+        <el-form-item label="经度" prop="lng">
+          <el-input v-model="form.lng" placeholder="请输入经度" />
+        </el-form-item>
+        <el-form-item label="纬度" prop="lat">
+          <el-input v-model="form.lat" placeholder="请输入纬度" />
+        </el-form-item>
+        <el-form-item label="是否展示" prop="isShow">
+          <el-input v-model="form.isShow" placeholder="请输入是否展示" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入备注" />
+        </el-form-item>
+        <el-form-item label="删除标志" prop="delFlag">
+          <el-input v-model="form.delFlag" 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="City">
+import { listCity, getCity, delCity, addCity, updateCity } from "@/api/logistics/city"
+
+const { proxy } = getCurrentInstance()
+
+const cityList = 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 data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    cityId: null,
+    level: null,
+    parentId: null,
+    areaCode: null,
+    name: null,
+    mergerName: null,
+    lng: null,
+    lat: null,
+    isShow: null,
+  },
+  rules: {
+    cityId: [
+      { required: true, message: "城市id不能为空", trigger: "blur" }
+    ],
+    level: [
+      { required: true, message: "省市级别不能为空", trigger: "blur" }
+    ],
+    parentId: [
+      { required: true, message: "父级id不能为空", trigger: "blur" }
+    ],
+    areaCode: [
+      { required: true, message: "区号不能为空", trigger: "blur" }
+    ],
+    name: [
+      { required: true, message: "名称不能为空", trigger: "blur" }
+    ],
+    mergerName: [
+      { required: true, message: "合并名称不能为空", trigger: "blur" }
+    ],
+    lng: [
+      { required: true, message: "经度不能为空", trigger: "blur" }
+    ],
+    lat: [
+      { required: true, message: "纬度不能为空", trigger: "blur" }
+    ],
+    isShow: [
+      { required: true, message: "是否展示不能为空", trigger: "blur" }
+    ],
+    createTime: [
+      { required: true, message: "创建时间不能为空", trigger: "blur" }
+    ],
+    updateTime: [
+      { required: true, message: "更新时间不能为空", trigger: "blur" }
+    ],
+  }
+})
+
+const { queryParams, form, rules } = toRefs(data)
+
+/** 查询城市管理列表 */
+function getList() {
+  loading.value = true
+  listCity(queryParams.value).then(response => {
+    cityList.value = response.rows
+    total.value = response.total
+    loading.value = false
+  })
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false
+  reset()
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    id: null,
+    cityId: null,
+    level: null,
+    parentId: null,
+    areaCode: null,
+    name: null,
+    mergerName: null,
+    lng: null,
+    lat: null,
+    isShow: null,
+    createTime: null,
+    updateTime: null,
+    createBy: null,
+    updateBy: null,
+    remark: null,
+    delFlag: null
+  }
+  proxy.resetForm("cityRef")
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef")
+  handleQuery()
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.id)
+  single.value = selection.length != 1
+  multiple.value = !selection.length
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset()
+  open.value = true
+  title.value = "添加城市管理"
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  reset()
+  const _id = row.id || ids.value
+  getCity(_id).then(response => {
+    form.value = response.data
+    open.value = true
+    title.value = "修改城市管理"
+  })
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["cityRef"].validate(valid => {
+    if (valid) {
+      if (form.value.id != null) {
+        updateCity(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功")
+          open.value = false
+          getList()
+        })
+      } else {
+        addCity(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功")
+          open.value = false
+          getList()
+        })
+      }
+    }
+  })
+}
+
+/** 删除按钮操作 */
+function handleDelete(row) {
+  const _ids = row.id || ids.value
+  proxy.$modal.confirm('是否确认删除城市管理编号为"' + _ids + '"的数据项?').then(function() {
+    return delCity(_ids)
+  }).then(() => {
+    getList()
+    proxy.$modal.msgSuccess("删除成功")
+  }).catch(() => {})
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('system/city/export', {
+    ...queryParams.value
+  }, `city_${new Date().getTime()}.xlsx`)
+}
+
+getList()
+</script>

+ 366 - 0
jd-logistics-ui-v3/src/views/logistics/costDetails/index.vue

@@ -0,0 +1,366 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="运单ID" prop="waybillId">
+        <el-input
+          v-model="queryParams.waybillId"
+          placeholder="请输入运单ID"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="外部运单号" prop="externalWaybillNo">
+        <el-input
+          v-model="queryParams.externalWaybillNo"
+          placeholder="请输入外部运单号"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="费用项目编码" prop="feeItemCode">
+        <el-input
+          v-model="queryParams.feeItemCode"
+          placeholder="请输入费用项目编码"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="费用项目名称" prop="feeItemName">
+        <el-input
+          v-model="queryParams.feeItemName"
+          placeholder="请输入费用项目名称"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="费用名称" prop="feeName">
+        <el-input
+          v-model="queryParams.feeName"
+          placeholder="请输入费用名称"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="金额" prop="amount">
+        <el-input
+          v-model="queryParams.amount"
+          placeholder="请输入金额"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="金额*费率" prop="rateAmount">
+        <el-input
+          v-model="queryParams.rateAmount"
+          placeholder="请输入金额*费率"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="调整金额" prop="adjustAmount">
+        <el-input
+          v-model="queryParams.adjustAmount"
+          placeholder="请输入调整金额"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="部门id" prop="deptId">
+        <el-input
+          v-model="queryParams.deptId"
+          placeholder="请输入部门id"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="用户id" prop="userId">
+        <el-input
+          v-model="queryParams.userId"
+          placeholder="请输入用户id"
+          clearable
+          @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="['system:costDetails:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="Edit"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:costDetails:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="Delete"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:costDetails:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="Download"
+          @click="handleExport"
+          v-hasPermi="['system:costDetails:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="costDetailsList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="运单明细id" align="center" prop="waybillDetailId" />
+      <el-table-column label="运单ID" align="center" prop="waybillId" />
+      <el-table-column label="外部运单号" align="center" prop="externalWaybillNo" />
+      <el-table-column label="费用项目编码" align="center" prop="feeItemCode" />
+      <el-table-column label="费用项目名称" align="center" prop="feeItemName" />
+      <el-table-column label="费用名称" align="center" prop="feeName" />
+      <el-table-column label="金额" align="center" prop="amount" />
+      <el-table-column label="金额*费率" align="center" prop="rateAmount" />
+      <el-table-column label="调整金额" align="center" prop="adjustAmount" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="部门id" align="center" prop="deptId" />
+      <el-table-column label="用户id" align="center" prop="userId" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:costDetails:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:costDetails:remove']">删除</el-button>
+        </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="500px" append-to-body>
+      <el-form ref="costDetailsRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="运单ID" prop="waybillId">
+          <el-input v-model="form.waybillId" placeholder="请输入运单ID" />
+        </el-form-item>
+        <el-form-item label="外部运单号" prop="externalWaybillNo">
+          <el-input v-model="form.externalWaybillNo" placeholder="请输入外部运单号" />
+        </el-form-item>
+        <el-form-item label="费用项目编码" prop="feeItemCode">
+          <el-input v-model="form.feeItemCode" placeholder="请输入费用项目编码" />
+        </el-form-item>
+        <el-form-item label="费用项目名称" prop="feeItemName">
+          <el-input v-model="form.feeItemName" placeholder="请输入费用项目名称" />
+        </el-form-item>
+        <el-form-item label="费用名称" prop="feeName">
+          <el-input v-model="form.feeName" placeholder="请输入费用名称" />
+        </el-form-item>
+        <el-form-item label="金额" prop="amount">
+          <el-input v-model="form.amount" placeholder="请输入金额" />
+        </el-form-item>
+        <el-form-item label="金额*费率" prop="rateAmount">
+          <el-input v-model="form.rateAmount" placeholder="请输入金额*费率" />
+        </el-form-item>
+        <el-form-item label="调整金额" prop="adjustAmount">
+          <el-input v-model="form.adjustAmount" placeholder="请输入调整金额" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入备注" />
+        </el-form-item>
+        <el-form-item label="部门id" prop="deptId">
+          <el-input v-model="form.deptId" placeholder="请输入部门id" />
+        </el-form-item>
+        <el-form-item label="用户id" prop="userId">
+          <el-input v-model="form.userId" placeholder="请输入用户id" />
+        </el-form-item>
+        <el-form-item label="删除标志 " prop="delFlag">
+          <el-input v-model="form.delFlag" 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="CostDetails">
+import { listCostDetails, getCostDetails, delCostDetails, addCostDetails, updateCostDetails } from "@/api/logistics/costDetails"
+
+const { proxy } = getCurrentInstance()
+
+const costDetailsList = 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 data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    waybillId: null,
+    externalWaybillNo: null,
+    feeItemCode: null,
+    feeItemName: null,
+    feeName: null,
+    amount: null,
+    rateAmount: null,
+    adjustAmount: null,
+    deptId: null,
+    userId: null,
+  },
+  rules: {
+  }
+})
+
+const { queryParams, form, rules } = toRefs(data)
+
+/** 查询运单明细列表 */
+function getList() {
+  loading.value = true
+  listCostDetails(queryParams.value).then(response => {
+    costDetailsList.value = response.rows
+    total.value = response.total
+    loading.value = false
+  })
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false
+  reset()
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    waybillDetailId: null,
+    waybillId: null,
+    externalWaybillNo: null,
+    feeItemCode: null,
+    feeItemName: null,
+    feeName: null,
+    amount: null,
+    rateAmount: null,
+    adjustAmount: null,
+    remark: null,
+    createTime: null,
+    updateTime: null,
+    deptId: null,
+    userId: null,
+    delFlag: null,
+    createBy: null,
+    updateBy: null
+  }
+  proxy.resetForm("costDetailsRef")
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef")
+  handleQuery()
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.waybillDetailId)
+  single.value = selection.length != 1
+  multiple.value = !selection.length
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset()
+  open.value = true
+  title.value = "添加运单明细"
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  reset()
+  const _waybillDetailId = row.waybillDetailId || ids.value
+  getCostDetails(_waybillDetailId).then(response => {
+    form.value = response.data
+    open.value = true
+    title.value = "修改运单明细"
+  })
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["costDetailsRef"].validate(valid => {
+    if (valid) {
+      if (form.value.waybillDetailId != null) {
+        updateCostDetails(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功")
+          open.value = false
+          getList()
+        })
+      } else {
+        addCostDetails(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功")
+          open.value = false
+          getList()
+        })
+      }
+    }
+  })
+}
+
+/** 删除按钮操作 */
+function handleDelete(row) {
+  const _waybillDetailIds = row.waybillDetailId || ids.value
+  proxy.$modal.confirm('是否确认删除运单明细编号为"' + _waybillDetailIds + '"的数据项?').then(function() {
+    return delCostDetails(_waybillDetailIds)
+  }).then(() => {
+    getList()
+    proxy.$modal.msgSuccess("删除成功")
+  }).catch(() => {})
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('system/costDetails/export', {
+    ...queryParams.value
+  }, `costDetails_${new Date().getTime()}.xlsx`)
+}
+
+getList()
+</script>

+ 324 - 0
jd-logistics-ui-v3/src/views/logistics/inancialFee/index.vue

@@ -0,0 +1,324 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="费用项目编码" prop="feeItemCode">
+        <el-input
+          v-model="queryParams.feeItemCode"
+          placeholder="请输入费用项目编码"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="费用项目名称" prop="feeItemName">
+        <el-input
+          v-model="queryParams.feeItemName"
+          placeholder="请输入费用项目名称"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="外部渠道 sf/jd" prop="feeItemCategory">
+        <el-input
+          v-model="queryParams.feeItemCategory"
+          placeholder="请输入外部渠道 sf/jd"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="外部费用编码" prop="extFeeCode">
+        <el-input
+          v-model="queryParams.extFeeCode"
+          placeholder="请输入外部费用编码"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="外部费用名称" prop="extFeeName">
+        <el-input
+          v-model="queryParams.extFeeName"
+          placeholder="请输入外部费用名称"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="部门ID" prop="deptId">
+        <el-input
+          v-model="queryParams.deptId"
+          placeholder="请输入部门ID"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="用户ID" prop="userId">
+        <el-input
+          v-model="queryParams.userId"
+          placeholder="请输入用户ID"
+          clearable
+          @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="['system:inancialFee:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="Edit"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:inancialFee:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="Delete"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:inancialFee:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="Download"
+          @click="handleExport"
+          v-hasPermi="['system:inancialFee:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="inancialFeeList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="费用项目id" align="center" prop="feeItemId" />
+      <el-table-column label="费用项目编码" align="center" prop="feeItemCode" />
+      <el-table-column label="费用项目名称" align="center" prop="feeItemName" />
+      <el-table-column label="外部渠道 sf/jd" align="center" prop="feeItemCategory" />
+      <el-table-column label="外部费用编码" align="center" prop="extFeeCode" />
+      <el-table-column label="外部费用名称" align="center" prop="extFeeName" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="部门ID" align="center" prop="deptId" />
+      <el-table-column label="用户ID" align="center" prop="userId" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:inancialFee:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:inancialFee:remove']">删除</el-button>
+        </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="500px" append-to-body>
+      <el-form ref="inancialFeeRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="费用项目编码" prop="feeItemCode">
+          <el-input v-model="form.feeItemCode" placeholder="请输入费用项目编码" />
+        </el-form-item>
+        <el-form-item label="费用项目名称" prop="feeItemName">
+          <el-input v-model="form.feeItemName" placeholder="请输入费用项目名称" />
+        </el-form-item>
+        <el-form-item label="外部渠道 sf/jd" prop="feeItemCategory">
+          <el-input v-model="form.feeItemCategory" placeholder="请输入外部渠道 sf/jd" />
+        </el-form-item>
+        <el-form-item label="外部费用编码" prop="extFeeCode">
+          <el-input v-model="form.extFeeCode" placeholder="请输入外部费用编码" />
+        </el-form-item>
+        <el-form-item label="外部费用名称" prop="extFeeName">
+          <el-input v-model="form.extFeeName" placeholder="请输入外部费用名称" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入备注" />
+        </el-form-item>
+        <el-form-item label="部门ID" prop="deptId">
+          <el-input v-model="form.deptId" placeholder="请输入部门ID" />
+        </el-form-item>
+        <el-form-item label="用户ID" prop="userId">
+          <el-input v-model="form.userId" placeholder="请输入用户ID" />
+        </el-form-item>
+        <el-form-item label="删除标志" prop="delFlag">
+          <el-input v-model="form.delFlag" 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="InancialFee">
+import { listInancialFee, getInancialFee, delInancialFee, addInancialFee, updateInancialFee } from "@/api/logistics/inancialFee"
+
+const { proxy } = getCurrentInstance()
+
+const inancialFeeList = 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 data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    feeItemCode: null,
+    feeItemName: null,
+    feeItemCategory: null,
+    extFeeCode: null,
+    extFeeName: null,
+    deptId: null,
+    userId: null,
+  },
+  rules: {
+  }
+})
+
+const { queryParams, form, rules } = toRefs(data)
+
+/** 查询费用类型管理列表 */
+function getList() {
+  loading.value = true
+  listInancialFee(queryParams.value).then(response => {
+    inancialFeeList.value = response.rows
+    total.value = response.total
+    loading.value = false
+  })
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false
+  reset()
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    feeItemId: null,
+    feeItemCode: null,
+    feeItemName: null,
+    feeItemCategory: null,
+    extFeeCode: null,
+    extFeeName: null,
+    createTime: null,
+    updateTime: null,
+    remark: null,
+    deptId: null,
+    userId: null,
+    delFlag: null,
+    createBy: null,
+    updateBy: null
+  }
+  proxy.resetForm("inancialFeeRef")
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef")
+  handleQuery()
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.feeItemId)
+  single.value = selection.length != 1
+  multiple.value = !selection.length
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset()
+  open.value = true
+  title.value = "添加费用类型管理"
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  reset()
+  const _feeItemId = row.feeItemId || ids.value
+  getInancialFee(_feeItemId).then(response => {
+    form.value = response.data
+    open.value = true
+    title.value = "修改费用类型管理"
+  })
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["inancialFeeRef"].validate(valid => {
+    if (valid) {
+      if (form.value.feeItemId != null) {
+        updateInancialFee(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功")
+          open.value = false
+          getList()
+        })
+      } else {
+        addInancialFee(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功")
+          open.value = false
+          getList()
+        })
+      }
+    }
+  })
+}
+
+/** 删除按钮操作 */
+function handleDelete(row) {
+  const _feeItemIds = row.feeItemId || ids.value
+  proxy.$modal.confirm('是否确认删除费用类型管理编号为"' + _feeItemIds + '"的数据项?').then(function() {
+    return delInancialFee(_feeItemIds)
+  }).then(() => {
+    getList()
+    proxy.$modal.msgSuccess("删除成功")
+  }).catch(() => {})
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('system/inancialFee/export', {
+    ...queryParams.value
+  }, `inancialFee_${new Date().getTime()}.xlsx`)
+}
+
+getList()
+</script>

+ 355 - 0
jd-logistics-ui-v3/src/views/logistics/monthSummary/index.vue

@@ -0,0 +1,355 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="汇总月份" prop="summaryMonth">
+        <el-input
+          v-model="queryParams.summaryMonth"
+          placeholder="请输入汇总月份"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="应付金额" prop="payableAmount">
+        <el-input
+          v-model="queryParams.payableAmount"
+          placeholder="请输入应付金额"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="交易笔数" prop="transactionCount">
+        <el-input
+          v-model="queryParams.transactionCount"
+          placeholder="请输入交易笔数"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="部门ID" prop="deptId">
+        <el-input
+          v-model="queryParams.deptId"
+          placeholder="请输入部门ID"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="用户id" prop="userId">
+        <el-input
+          v-model="queryParams.userId"
+          placeholder="请输入用户id"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="百旺开票单据编号" prop="bwDjbh">
+        <el-input
+          v-model="queryParams.bwDjbh"
+          placeholder="请输入百旺开票单据编号"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="电子发票pdf地址" prop="bwDzfpPdfUrl">
+        <el-input
+          v-model="queryParams.bwDzfpPdfUrl"
+          placeholder="请输入电子发票pdf地址"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="电子发票ofd地址" prop="bwDzfpOfdUrl">
+        <el-input
+          v-model="queryParams.bwDzfpOfdUrl"
+          placeholder="请输入电子发票ofd地址"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="电子发票xml地址" prop="bwDzfpXmlUrl">
+        <el-input
+          v-model="queryParams.bwDzfpXmlUrl"
+          placeholder="请输入电子发票xml地址"
+          clearable
+          @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="['system:monthSummary:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="Edit"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:monthSummary:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="Delete"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:monthSummary:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="Download"
+          @click="handleExport"
+          v-hasPermi="['system:monthSummary:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="monthSummaryList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="月度汇总id" align="center" prop="summaryId" />
+      <el-table-column label="汇总月份" align="center" prop="summaryMonth" />
+      <el-table-column label="应付金额" align="center" prop="payableAmount" />
+      <el-table-column label="交易笔数" align="center" prop="transactionCount" />
+      <el-table-column label="账单状态 1.待对账 2.已对账 3.待开票 4.已开票" align="center" prop="status" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="部门ID" align="center" prop="deptId" />
+      <el-table-column label="用户id" align="center" prop="userId" />
+      <el-table-column label="百旺开票单据编号" align="center" prop="bwDjbh" />
+      <el-table-column label="电子发票pdf地址" align="center" prop="bwDzfpPdfUrl" />
+      <el-table-column label="电子发票ofd地址" align="center" prop="bwDzfpOfdUrl" />
+      <el-table-column label="电子发票xml地址" align="center" prop="bwDzfpXmlUrl" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:monthSummary:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:monthSummary:remove']">删除</el-button>
+        </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="500px" append-to-body>
+      <el-form ref="monthSummaryRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="汇总月份" prop="summaryMonth">
+          <el-input v-model="form.summaryMonth" placeholder="请输入汇总月份" />
+        </el-form-item>
+        <el-form-item label="应付金额" prop="payableAmount">
+          <el-input v-model="form.payableAmount" placeholder="请输入应付金额" />
+        </el-form-item>
+        <el-form-item label="交易笔数" prop="transactionCount">
+          <el-input v-model="form.transactionCount" placeholder="请输入交易笔数" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入备注" />
+        </el-form-item>
+        <el-form-item label="删除标志" prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="请输入删除标志" />
+        </el-form-item>
+        <el-form-item label="部门ID" prop="deptId">
+          <el-input v-model="form.deptId" placeholder="请输入部门ID" />
+        </el-form-item>
+        <el-form-item label="用户id" prop="userId">
+          <el-input v-model="form.userId" placeholder="请输入用户id" />
+        </el-form-item>
+        <el-form-item label="百旺开票单据编号" prop="bwDjbh">
+          <el-input v-model="form.bwDjbh" placeholder="请输入百旺开票单据编号" />
+        </el-form-item>
+        <el-form-item label="电子发票pdf地址" prop="bwDzfpPdfUrl">
+          <el-input v-model="form.bwDzfpPdfUrl" placeholder="请输入电子发票pdf地址" />
+        </el-form-item>
+        <el-form-item label="电子发票ofd地址" prop="bwDzfpOfdUrl">
+          <el-input v-model="form.bwDzfpOfdUrl" placeholder="请输入电子发票ofd地址" />
+        </el-form-item>
+        <el-form-item label="电子发票xml地址" prop="bwDzfpXmlUrl">
+          <el-input v-model="form.bwDzfpXmlUrl" placeholder="请输入电子发票xml地址" />
+        </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="MonthSummary">
+import { listMonthSummary, getMonthSummary, delMonthSummary, addMonthSummary, updateMonthSummary } from "@/api/logistics/monthSummary"
+
+const { proxy } = getCurrentInstance()
+
+const monthSummaryList = 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 data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    summaryMonth: null,
+    payableAmount: null,
+    transactionCount: null,
+    status: null,
+    deptId: null,
+    userId: null,
+    bwDjbh: null,
+    bwDzfpPdfUrl: null,
+    bwDzfpOfdUrl: null,
+    bwDzfpXmlUrl: null
+  },
+  rules: {
+  }
+})
+
+const { queryParams, form, rules } = toRefs(data)
+
+/** 查询财务月度汇总列表 */
+function getList() {
+  loading.value = true
+  listMonthSummary(queryParams.value).then(response => {
+    monthSummaryList.value = response.rows
+    total.value = response.total
+    loading.value = false
+  })
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false
+  reset()
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    summaryId: null,
+    summaryMonth: null,
+    payableAmount: null,
+    transactionCount: null,
+    status: null,
+    createTime: null,
+    updateTime: null,
+    remark: null,
+    delFlag: null,
+    createBy: null,
+    updateBy: null,
+    deptId: null,
+    userId: null,
+    bwDjbh: null,
+    bwDzfpPdfUrl: null,
+    bwDzfpOfdUrl: null,
+    bwDzfpXmlUrl: null
+  }
+  proxy.resetForm("monthSummaryRef")
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef")
+  handleQuery()
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.summaryId)
+  single.value = selection.length != 1
+  multiple.value = !selection.length
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset()
+  open.value = true
+  title.value = "添加财务月度汇总"
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  reset()
+  const _summaryId = row.summaryId || ids.value
+  getMonthSummary(_summaryId).then(response => {
+    form.value = response.data
+    open.value = true
+    title.value = "修改财务月度汇总"
+  })
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["monthSummaryRef"].validate(valid => {
+    if (valid) {
+      if (form.value.summaryId != null) {
+        updateMonthSummary(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功")
+          open.value = false
+          getList()
+        })
+      } else {
+        addMonthSummary(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功")
+          open.value = false
+          getList()
+        })
+      }
+    }
+  })
+}
+
+/** 删除按钮操作 */
+function handleDelete(row) {
+  const _summaryIds = row.summaryId || ids.value
+  proxy.$modal.confirm('是否确认删除财务月度汇总编号为"' + _summaryIds + '"的数据项?').then(function() {
+    return delMonthSummary(_summaryIds)
+  }).then(() => {
+    getList()
+    proxy.$modal.msgSuccess("删除成功")
+  }).catch(() => {})
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('system/monthSummary/export', {
+    ...queryParams.value
+  }, `monthSummary_${new Date().getTime()}.xlsx`)
+}
+
+getList()
+</script>

+ 663 - 0
jd-logistics-ui-v3/src/views/logistics/order/index.vue

@@ -0,0 +1,663 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="运单号 内部生成" prop="waybillNo">
+        <el-input
+          v-model="queryParams.waybillNo"
+          placeholder="请输入运单号 内部生成"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="外部运单号 JD/SF的运单号" prop="externalWaybillNo">
+        <el-input
+          v-model="queryParams.externalWaybillNo"
+          placeholder="请输入外部运单号 JD/SF的运单号"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="发件人姓名" prop="senderName">
+        <el-input
+          v-model="queryParams.senderName"
+          placeholder="请输入发件人姓名"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="发件人电话" prop="senderPhone">
+        <el-input
+          v-model="queryParams.senderPhone"
+          placeholder="请输入发件人电话"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="发件省" prop="senderProvince">
+        <el-input
+          v-model="queryParams.senderProvince"
+          placeholder="请输入发件省"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="发件市" prop="senderCity">
+        <el-input
+          v-model="queryParams.senderCity"
+          placeholder="请输入发件市"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="发件区县" prop="senderCounty">
+        <el-input
+          v-model="queryParams.senderCounty"
+          placeholder="请输入发件区县"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="发件详细地址" prop="senderAddress">
+        <el-input
+          v-model="queryParams.senderAddress"
+          placeholder="请输入发件详细地址"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="收件人姓名" prop="receiverName">
+        <el-input
+          v-model="queryParams.receiverName"
+          placeholder="请输入收件人姓名"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="收件人电话" prop="receiverPhone">
+        <el-input
+          v-model="queryParams.receiverPhone"
+          placeholder="请输入收件人电话"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="收件省" prop="receiverProvince">
+        <el-input
+          v-model="queryParams.receiverProvince"
+          placeholder="请输入收件省"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="收件市" prop="receiverCity">
+        <el-input
+          v-model="queryParams.receiverCity"
+          placeholder="请输入收件市"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="收件区县" prop="receiverCounty">
+        <el-input
+          v-model="queryParams.receiverCounty"
+          placeholder="请输入收件区县"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="收件详细地址" prop="receiverAddress">
+        <el-input
+          v-model="queryParams.receiverAddress"
+          placeholder="请输入收件详细地址"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="货物名称" prop="goodsName">
+        <el-input
+          v-model="queryParams.goodsName"
+          placeholder="请输入货物名称"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="货物重量" prop="goodsWeight">
+        <el-input
+          v-model="queryParams.goodsWeight"
+          placeholder="请输入货物重量"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="货物体积" prop="goodsVolume">
+        <el-input
+          v-model="queryParams.goodsVolume"
+          placeholder="请输入货物体积"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="货物数量" prop="goodsQty">
+        <el-input
+          v-model="queryParams.goodsQty"
+          placeholder="请输入货物数量"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="上门取件时间" prop="sendStartTime">
+        <el-date-picker clearable
+          v-model="queryParams.sendStartTime"
+          type="date"
+          value-format="YYYY-MM-DD"
+          placeholder="请选择上门取件时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="揽收时间" prop="pickupTime">
+        <el-date-picker clearable
+          v-model="queryParams.pickupTime"
+          type="date"
+          value-format="YYYY-MM-DD"
+          placeholder="请选择揽收时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="派送时间" prop="deliveryTime">
+        <el-date-picker clearable
+          v-model="queryParams.deliveryTime"
+          type="date"
+          value-format="YYYY-MM-DD"
+          placeholder="请选择派送时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="签收时间" prop="signTime">
+        <el-date-picker clearable
+          v-model="queryParams.signTime"
+          type="date"
+          value-format="YYYY-MM-DD"
+          placeholder="请选择签收时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="取消原因" prop="cancelReason">
+        <el-input
+          v-model="queryParams.cancelReason"
+          placeholder="请输入取消原因"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="父运单ID" prop="parentWaybillId">
+        <el-input
+          v-model="queryParams.parentWaybillId"
+          placeholder="请输入父运单ID"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="是否结算开票" prop="invoiceFlag">
+        <el-input
+          v-model="queryParams.invoiceFlag"
+          placeholder="请输入是否结算开票"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="是否调账" prop="adjustFlag">
+        <el-input
+          v-model="queryParams.adjustFlag"
+          placeholder="请输入是否调账"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="部门ID" prop="deptId">
+        <el-input
+          v-model="queryParams.deptId"
+          placeholder="请输入部门ID"
+          clearable
+          @keyup.enter="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="用户ID" prop="userId">
+        <el-input
+          v-model="queryParams.userId"
+          placeholder="请输入用户ID"
+          clearable
+          @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="['system:order:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="Edit"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:order:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="Delete"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:order:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="Download"
+          @click="handleExport"
+          v-hasPermi="['system:order:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="orderList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="运单id" align="center" prop="waybillId" />
+      <el-table-column label="运单号 内部生成" align="center" prop="waybillNo" />
+      <el-table-column label="外部运单号 JD/SF的运单号" align="center" prop="externalWaybillNo" />
+      <el-table-column label="订单类型 1-非时效件(京东),2-时效件(顺丰)" align="center" prop="orderType" />
+      <el-table-column label="发件人姓名" align="center" prop="senderName" />
+      <el-table-column label="发件人电话" align="center" prop="senderPhone" />
+      <el-table-column label="发件省" align="center" prop="senderProvince" />
+      <el-table-column label="发件市" align="center" prop="senderCity" />
+      <el-table-column label="发件区县" align="center" prop="senderCounty" />
+      <el-table-column label="发件详细地址" align="center" prop="senderAddress" />
+      <el-table-column label="收件人姓名" align="center" prop="receiverName" />
+      <el-table-column label="收件人电话" align="center" prop="receiverPhone" />
+      <el-table-column label="收件省" align="center" prop="receiverProvince" />
+      <el-table-column label="收件市" align="center" prop="receiverCity" />
+      <el-table-column label="收件区县" align="center" prop="receiverCounty" />
+      <el-table-column label="收件详细地址" align="center" prop="receiverAddress" />
+      <el-table-column label="货物名称" align="center" prop="goodsName" />
+      <el-table-column label="货物重量" align="center" prop="goodsWeight" />
+      <el-table-column label="货物体积" align="center" prop="goodsVolume" />
+      <el-table-column label="货物数量" align="center" prop="goodsQty" />
+      <el-table-column label="订单状态" align="center" prop="orderStatus" />
+      <el-table-column label="取件类型" align="center" prop="pickupType" />
+      <el-table-column label="上门取件时间" align="center" prop="sendStartTime" width="180">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.sendStartTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="揽收时间" align="center" prop="pickupTime" width="180">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.pickupTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="派送时间" align="center" prop="deliveryTime" width="180">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.deliveryTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="签收时间" align="center" prop="signTime" width="180">
+        <template #default="scope">
+          <span>{{ parseTime(scope.row.signTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="取消原因" align="center" prop="cancelReason" />
+      <el-table-column label="父运单ID" align="center" prop="parentWaybillId" />
+      <el-table-column label="是否结算开票" align="center" prop="invoiceFlag" />
+      <el-table-column label="是否调账" align="center" prop="adjustFlag" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="部门ID" align="center" prop="deptId" />
+      <el-table-column label="用户ID" align="center" prop="userId" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template #default="scope">
+          <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['system:order:edit']">修改</el-button>
+          <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['system:order:remove']">删除</el-button>
+        </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="500px" append-to-body>
+      <el-form ref="orderRef" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="运单号 内部生成" prop="waybillNo">
+          <el-input v-model="form.waybillNo" placeholder="请输入运单号 内部生成" />
+        </el-form-item>
+        <el-form-item label="外部运单号 JD/SF的运单号" prop="externalWaybillNo">
+          <el-input v-model="form.externalWaybillNo" placeholder="请输入外部运单号 JD/SF的运单号" />
+        </el-form-item>
+        <el-form-item label="发件人姓名" prop="senderName">
+          <el-input v-model="form.senderName" placeholder="请输入发件人姓名" />
+        </el-form-item>
+        <el-form-item label="发件人电话" prop="senderPhone">
+          <el-input v-model="form.senderPhone" placeholder="请输入发件人电话" />
+        </el-form-item>
+        <el-form-item label="发件省" prop="senderProvince">
+          <el-input v-model="form.senderProvince" placeholder="请输入发件省" />
+        </el-form-item>
+        <el-form-item label="发件市" prop="senderCity">
+          <el-input v-model="form.senderCity" placeholder="请输入发件市" />
+        </el-form-item>
+        <el-form-item label="发件区县" prop="senderCounty">
+          <el-input v-model="form.senderCounty" placeholder="请输入发件区县" />
+        </el-form-item>
+        <el-form-item label="发件详细地址" prop="senderAddress">
+          <el-input v-model="form.senderAddress" placeholder="请输入发件详细地址" />
+        </el-form-item>
+        <el-form-item label="收件人姓名" prop="receiverName">
+          <el-input v-model="form.receiverName" placeholder="请输入收件人姓名" />
+        </el-form-item>
+        <el-form-item label="收件人电话" prop="receiverPhone">
+          <el-input v-model="form.receiverPhone" placeholder="请输入收件人电话" />
+        </el-form-item>
+        <el-form-item label="收件省" prop="receiverProvince">
+          <el-input v-model="form.receiverProvince" placeholder="请输入收件省" />
+        </el-form-item>
+        <el-form-item label="收件市" prop="receiverCity">
+          <el-input v-model="form.receiverCity" placeholder="请输入收件市" />
+        </el-form-item>
+        <el-form-item label="收件区县" prop="receiverCounty">
+          <el-input v-model="form.receiverCounty" placeholder="请输入收件区县" />
+        </el-form-item>
+        <el-form-item label="收件详细地址" prop="receiverAddress">
+          <el-input v-model="form.receiverAddress" placeholder="请输入收件详细地址" />
+        </el-form-item>
+        <el-form-item label="货物名称" prop="goodsName">
+          <el-input v-model="form.goodsName" placeholder="请输入货物名称" />
+        </el-form-item>
+        <el-form-item label="货物重量" prop="goodsWeight">
+          <el-input v-model="form.goodsWeight" placeholder="请输入货物重量" />
+        </el-form-item>
+        <el-form-item label="货物体积" prop="goodsVolume">
+          <el-input v-model="form.goodsVolume" placeholder="请输入货物体积" />
+        </el-form-item>
+        <el-form-item label="货物数量" prop="goodsQty">
+          <el-input v-model="form.goodsQty" placeholder="请输入货物数量" />
+        </el-form-item>
+        <el-form-item label="上门取件时间" prop="sendStartTime">
+          <el-date-picker clearable
+            v-model="form.sendStartTime"
+            type="date"
+            value-format="YYYY-MM-DD"
+            placeholder="请选择上门取件时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="揽收时间" prop="pickupTime">
+          <el-date-picker clearable
+            v-model="form.pickupTime"
+            type="date"
+            value-format="YYYY-MM-DD"
+            placeholder="请选择揽收时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="派送时间" prop="deliveryTime">
+          <el-date-picker clearable
+            v-model="form.deliveryTime"
+            type="date"
+            value-format="YYYY-MM-DD"
+            placeholder="请选择派送时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="签收时间" prop="signTime">
+          <el-date-picker clearable
+            v-model="form.signTime"
+            type="date"
+            value-format="YYYY-MM-DD"
+            placeholder="请选择签收时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="取消原因" prop="cancelReason">
+          <el-input v-model="form.cancelReason" placeholder="请输入取消原因" />
+        </el-form-item>
+        <el-form-item label="父运单ID" prop="parentWaybillId">
+          <el-input v-model="form.parentWaybillId" placeholder="请输入父运单ID" />
+        </el-form-item>
+        <el-form-item label="是否结算开票" prop="invoiceFlag">
+          <el-input v-model="form.invoiceFlag" placeholder="请输入是否结算开票" />
+        </el-form-item>
+        <el-form-item label="是否调账" prop="adjustFlag">
+          <el-input v-model="form.adjustFlag" placeholder="请输入是否调账" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入备注" />
+        </el-form-item>
+        <el-form-item label="删除标志 " prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="请输入删除标志 " />
+        </el-form-item>
+        <el-form-item label="部门ID" prop="deptId">
+          <el-input v-model="form.deptId" placeholder="请输入部门ID" />
+        </el-form-item>
+        <el-form-item label="用户ID" prop="userId">
+          <el-input v-model="form.userId" placeholder="请输入用户ID" />
+        </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="Order">
+import { listOrder, getOrder, delOrder, addOrder, updateOrder } from "@/api/logistics/order"
+
+const { proxy } = getCurrentInstance()
+
+const orderList = 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 data = reactive({
+  form: {},
+  queryParams: {
+    pageNum: 1,
+    pageSize: 10,
+    waybillNo: null,
+    externalWaybillNo: null,
+    orderType: null,
+    senderName: null,
+    senderPhone: null,
+    senderProvince: null,
+    senderCity: null,
+    senderCounty: null,
+    senderAddress: null,
+    receiverName: null,
+    receiverPhone: null,
+    receiverProvince: null,
+    receiverCity: null,
+    receiverCounty: null,
+    receiverAddress: null,
+    goodsName: null,
+    goodsWeight: null,
+    goodsVolume: null,
+    goodsQty: null,
+    orderStatus: null,
+    pickupType: null,
+    sendStartTime: null,
+    pickupTime: null,
+    deliveryTime: null,
+    signTime: null,
+    cancelReason: null,
+    parentWaybillId: null,
+    invoiceFlag: null,
+    adjustFlag: null,
+    deptId: null,
+    userId: null
+  },
+  rules: {
+  }
+})
+
+const { queryParams, form, rules } = toRefs(data)
+
+/** 查询运单管理列表 */
+function getList() {
+  loading.value = true
+  listOrder(queryParams.value).then(response => {
+    orderList.value = response.rows
+    total.value = response.total
+    loading.value = false
+  })
+}
+
+// 取消按钮
+function cancel() {
+  open.value = false
+  reset()
+}
+
+// 表单重置
+function reset() {
+  form.value = {
+    waybillId: null,
+    waybillNo: null,
+    externalWaybillNo: null,
+    orderType: null,
+    senderName: null,
+    senderPhone: null,
+    senderProvince: null,
+    senderCity: null,
+    senderCounty: null,
+    senderAddress: null,
+    receiverName: null,
+    receiverPhone: null,
+    receiverProvince: null,
+    receiverCity: null,
+    receiverCounty: null,
+    receiverAddress: null,
+    goodsName: null,
+    goodsWeight: null,
+    goodsVolume: null,
+    goodsQty: null,
+    orderStatus: null,
+    pickupType: null,
+    sendStartTime: null,
+    pickupTime: null,
+    deliveryTime: null,
+    signTime: null,
+    cancelReason: null,
+    parentWaybillId: null,
+    invoiceFlag: null,
+    adjustFlag: null,
+    remark: null,
+    createTime: null,
+    updateTime: null,
+    delFlag: null,
+    createBy: null,
+    updateBy: null,
+    deptId: null,
+    userId: null
+  }
+  proxy.resetForm("orderRef")
+}
+
+/** 搜索按钮操作 */
+function handleQuery() {
+  queryParams.value.pageNum = 1
+  getList()
+}
+
+/** 重置按钮操作 */
+function resetQuery() {
+  proxy.resetForm("queryRef")
+  handleQuery()
+}
+
+// 多选框选中数据
+function handleSelectionChange(selection) {
+  ids.value = selection.map(item => item.waybillId)
+  single.value = selection.length != 1
+  multiple.value = !selection.length
+}
+
+/** 新增按钮操作 */
+function handleAdd() {
+  reset()
+  open.value = true
+  title.value = "添加运单管理"
+}
+
+/** 修改按钮操作 */
+function handleUpdate(row) {
+  reset()
+  const _waybillId = row.waybillId || ids.value
+  getOrder(_waybillId).then(response => {
+    form.value = response.data
+    open.value = true
+    title.value = "修改运单管理"
+  })
+}
+
+/** 提交按钮 */
+function submitForm() {
+  proxy.$refs["orderRef"].validate(valid => {
+    if (valid) {
+      if (form.value.waybillId != null) {
+        updateOrder(form.value).then(response => {
+          proxy.$modal.msgSuccess("修改成功")
+          open.value = false
+          getList()
+        })
+      } else {
+        addOrder(form.value).then(response => {
+          proxy.$modal.msgSuccess("新增成功")
+          open.value = false
+          getList()
+        })
+      }
+    }
+  })
+}
+
+/** 删除按钮操作 */
+function handleDelete(row) {
+  const _waybillIds = row.waybillId || ids.value
+  proxy.$modal.confirm('是否确认删除运单管理编号为"' + _waybillIds + '"的数据项?').then(function() {
+    return delOrder(_waybillIds)
+  }).then(() => {
+    getList()
+    proxy.$modal.msgSuccess("删除成功")
+  }).catch(() => {})
+}
+
+/** 导出按钮操作 */
+function handleExport() {
+  proxy.download('system/order/export', {
+    ...queryParams.value
+  }, `order_${new Date().getTime()}.xlsx`)
+}
+
+getList()
+</script>