e38b54037fb3e2a7e2014c0f1931d026ac6f6972..4a5d3433c6d69c08c2139067a8f8fc5fd9314fb3
6 天以前 sen
添加订单类型选择的检验
4a5d34 对比 | 目录
6 天以前 sen
添加日志和手动审核
394a36 对比 | 目录
6 天以前 wujianwei
修改导出标题
a0540d 对比 | 目录
1个文件已添加
5个文件已修改
228 ■■■■■ 已修改文件
tms/src/main/java/com/ruoyi/tms/service/impl/TmsArBillServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ui/admin-ui3/src/components/flowLogA/index.vue 177 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ui/admin-ui3/src/main.ts 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ui/admin-ui3/src/views/tms/tmsApBill/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ui/admin-ui3/src/views/tms/tmsArBill/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tms/src/main/java/com/ruoyi/tms/service/impl/TmsArBillServiceImpl.java
@@ -834,7 +834,7 @@
        for (int i = 0; i <= 9; i++) {
            Cell cell = titleRow.createCell(i);
            if (i == 0) {
                cell.setCellValue(tmsArBill.getCustomerName());
                cell.setCellValue("珠海市汇畅交通投资有限公司");
                // 居中显示
                CellStyle centerStyle = sheet.getWorkbook().createCellStyle();
                centerStyle.setAlignment(HorizontalAlignment.CENTER);
ui/admin-ui3/src/components/flowLogA/index.vue
New file
@@ -0,0 +1,177 @@
<script lang="ts" setup>
import { reactive, ref, toRefs, watch, nextTick } from "vue";
import { BaseEntityInterface, PageQueryInterface } from "@/utils/globalInterface";
import { usePagePlus } from "@/hooks/usePagePlus";
import { getToken } from "@/utils/auth";
// import { listDzInoutOrder } from "@/api/dz/dzInoutOrder";
import useCurrentInstance from "@/utils/useCurrentInstance"; import { ElTable, ElTableColumn } from 'element-plus'
const { proxy } = useCurrentInstance();
interface DzInoutOrderI extends BaseEntityInterface {
    id?: number,
    no?: string,
    sasStockNo?: string,
    entryNo?: string,
    bondInvtId?: number,
    bondInvtNo?: string,
    releaseId?: number,
    releaseNo?: string,
    areainOriactNo?: string,
    areainEtpsNo?: string,
    areainEtpsNm?: string,
    areainEtpsSccd?: string,
    masterCuscd?: string,
    stockTypecd?: string,
    businessTypecd?: string,
    rltSasStockNo?: string,
    dclEr?: string,
    dclEtpsNo?: string,
    dclEtpsNm?: string,
    dclEtpsSccd?: string,
    inputCode?: string,
    inputSccd?: string,
    inputName?: string,
    etpsPreentNo?: string,
    packageQty?: string,
    grossWt?: string,
    netWt?: string,
    packType?: string,
    eportReplaceMark?: number,
    mtpckEndprdType?: string,
    enterpriseName?: string,
    stockDate?: string,
    tradeType?: number,
    conveyanceId?: number,
    conveyanceNo?: string,
    conveyanceName?: string,
    enterId?: number,
    deleted?: number,
}
const props = defineProps({
    flowParams: Array,
    flowParamsShow: {
        type: Boolean,
        default: false
    },
    fileNameIshow: {
        type: Boolean,
        default: false
    },
    isShow: {
        type: Boolean,
        default: true
    },
    title: { // 1. 定义 prop
        type: String,
        default: '流程日志'
    }
})
console.log(props);
const { } =
    proxy.useDict();
const stockTypecdFormat = (row: any) => {
    return proxy.selectDictLabel(sy_dz_account_book_status.value, row.stockTypecd);
}
const data = reactive({
    orderSelection: <DzInoutOrderI[]>[],
    queryParams: <DzInoutOrderI & PageQueryInterface>{ pageNum: 1, pageSize: 10 },
    rules: {},
})
const { queryParams, rules, orderSelection } = toRefs(data);
const currentRow = ref()
const emit = defineEmits(['affirm'])
const {
    pageF, tableData, getList,
    handleQuery, resetQuery,
} = usePagePlus({
    title: props.title,
    queryParams: queryParams.value,
    // getListApi: listDzInoutOrder,
    resetQueryFunc: () => {
    },
})
const multipleTableRef = ref<InstanceType<typeof ElTable>>()
/**
 * 确定
 */
const affirmQuery = () => {
}
let newArray = ref<any>()
const openModel = () => {
    pageF.drawerOpen = true;
}
const closeModel = () => {
    pageF.drawerOpen = false;
}
// getList()
const download_qr_code = (row: string) => {
   downloadFile(row.fileName);
}
const baseURL = import.meta.env.VITE_APP_BASE_API
// 创建一个点击事件触发下载
function downloadFile(row: any) {
    // 文件下载地址
    const fileUrl = baseURL + "/common/download/resource?resource=" + encodeURI(row);
    // 设置请求头
    const headers = new Headers();
    headers.append('Authorization', 'Bearer ' + getToken()); // 设置授权头,替换YourAccessToken为实际的访问令牌
    // 发起 Fetch 请求
    fetch(fileUrl, {
        method: 'GET',
        headers: headers,
    })
        .then(response => response.blob())
        .then(blob => {
            // 创建一个虚拟的链接元素,模拟点击下载
            const link = document.createElement('a');
            link.href = window.URL.createObjectURL(blob);
            link.download = row; // 设置下载文件名,替换filename.ext为实际的文件名和扩展名
            document.body.appendChild(link);
            // 模拟点击
            link.click();
            // 移除虚拟链接元素
            document.body.removeChild(link);
        })
        .catch(error => console.error('下载失败:', error));
}
defineExpose({
    openModel,
})
</script>
<template>
    <el-dialog v-model="pageF.drawerOpen" :title="props.title" append-to-body width="1000px">
        <div class="app-container" style="padding-top: 0;">
            <el-table ref="multipleTableRef" :data="props.flowParams">
                <el-table-column align="center" label="处理时间" prop="createTime" />
                <el-table-column align="center" label="处理人员" prop="createBy" />
                <el-table-column  align="center" label="节点描述" prop="operation" show-overflow-tooltip="true" />
            </el-table>
            <!-- <pagination style="position: relative;" v-show="pageF.total > 0" v-model:limit="queryParams.pageSize"
                v-model:page="queryParams.pageNum" :total="pageF.total" @pagination="getList" /> -->
        </div>
        <div class="dialog-footer" style="text-align: right">
            <el-button @click="closeModel">关闭</el-button>
        </div>
    </el-dialog>
</template>
<style scoped></style>
ui/admin-ui3/src/main.ts
@@ -28,6 +28,8 @@
import FileUpload from "/src/components/FileUpload/index.vue";
import basicContainer from '/src/components/basic-container/main.vue';
import flowLog from './components/flowLog/index.vue';
import flowLogA from './components/flowLogA/index.vue';
import SvgIcon from "/src/components/SvgIcon/index.vue";
@@ -35,6 +37,8 @@
app.component('FileUpload', FileUpload);
app.component('basicContainer', basicContainer)
app.component('flowLog', flowLog)
app.component('flowLogA', flowLogA)
app.component('svg-icon', SvgIcon)
ui/admin-ui3/src/views/tms/tmsApBill/index.vue
@@ -29,7 +29,7 @@
                 @click="handleJs(row)" class="link-btn" :underline="false"
                 icon="el-icon-tickets">结算
        </el-link> -->
        <el-link size="small" type="primary" v-if="row.pushStatus == '3' || row.pushStatus == '4'"
        <el-link size="small" type="primary" v-if="row.pushStatus == 3 || row.pushStatus == 4|| row.pushStatus == 0"
          @click="handleManualPush(row)" class="link-btn" underline="never" icon="el-icon-upload">手动推送
        </el-link>
        <el-link size="small" type="primary" v-if="row.status == 0" @click="handleEdit(row)" class="link-btn"
@@ -121,7 +121,7 @@
  </basicContainer>
      <flowLog ref="flowLogIshow" :isShow="false" title="审核日志" :flowParams="flowParams"></flowLog>
      <flowLogA ref="flowLogIshow" :isShow="true"  title="审核日志" :flowParams="flowParams"></flowLogA>
</template>
<script setup name="tmsApBill" lang="ts">
ui/admin-ui3/src/views/tms/tmsArBill/index.vue
@@ -38,7 +38,7 @@
        <el-link size="small" type="primary" v-if="row.status != 2" @click="handleJs(row)" class="link-btn"
          underline="never" icon="el-icon-tickets">结算
        </el-link>
        <el-link size="small" type="primary" v-if="row.pushStatus == '3' || row.pushStatus == '4'"
        <el-link size="small" type="primary" v-if="row.pushStatus == 3 || row.pushStatus == 4|| row.pushStatus == 0"
          @click="handleManualPush(row)" class="link-btn" underline="never" icon="el-icon-upload">手动推送
        </el-link>
        <el-link size="small" type="primary" @click="handleDerive(row)" class="link-btn" underline="never"
@@ -132,7 +132,7 @@
  </basicContainer>
      <flowLog ref="flowLogIshow" :isShow="false" title="审核日志" :flowParams="flowParams"></flowLog>
      <flowLogA ref="flowLogIshow" :isShow="false" title="审核日志" :flowParams="flowParams"></flowLogA>
</template>
<script setup name="tmsArBill" lang="ts">
ui/admin-ui3/src/views/tms/tmsDispatchOrder/index.vue
@@ -23,7 +23,7 @@
          <span>{{ dictFormat(order_type, row?.orderType || form?.orderType) }}</span>
        </template>
        <template v-else>
          <el-select v-model="form.orderType" placeholder="请选择订单类型" style="width: 100%" clearable>
          <el-select v-model="form.orderType" placeholder="请选择订单类型"  @change="(val) => handleOrderTypeChange(val)" style="width: 100%" clearable>
            <el-option v-for="item in order_type" :key="item.value" :label="item.label" :value="parseInt(item.value)" />
          </el-select>
        </template>
@@ -4955,6 +4955,41 @@
    // 取消操作
  });
}
const handleOrderTypeChange = (value: any) => {
  // 防止 value 为 null 或 undefined 时出错 (当清空选择时)
  if (value === null || value === undefined) {
     return;
  }
  option.value.group.forEach((item: any) => {
    if (item.prop == 'pcxx') {
      // 处理装货点必填规则
      if (item.column.shipperId && item.column.shipperId.rules) {
        item.column.shipperId.rules.forEach((cItem: any) => {
          cItem.required = !(value == 1);
        });
      }
      // 处理卸货点必填规则
      if (item.column.receiverId && item.column.receiverId.rules) {
        item.column.receiverId.rules.forEach((cItem: any) => {
          cItem.required = !(value == 1);
        });
      }
    }
  });
  // 【新增逻辑】如果切换到了非必填状态 (value == 1),则清除这两个字段的校验提示
  if (value == 1) {
    // 确保 crudRef 存在且暴露了 clearValidate 方法
    if (crudRef.value && typeof crudRef.value.clearValidate === 'function') {
      // 清除指定字段的校验状态
      crudRef.value.clearValidate(['shipperId', 'receiverId']);
    }
  }
};
</script>
<style lang="scss" scoped>
::v-deep .cydprint .el-dialog__body {