el-pagination里的左右箭头改成文字并且修改样式,修改el-descriptions的样式

<el-descriptions :column="4">
    <el-descriptions-item label="身份" :span="2">驾驶员</el-descriptions-item>
    <el-descriptions-item label="姓名">嗯嗯嗯呢呢嗯嗯嗯</el-descriptions-item>
    <el-descriptions-item label="政治面貌">党员</el-descriptions-item>
    <el-descriptions-item label="年龄" :span="1"> 33 </el-descriptions-item>
    <el-descriptions-item label="性别" :span="1">男</el-descriptions-item>
    <el-descriptions-item label="手机号" :span="1">
      18311223344
    </el-descriptions-item>
    <el-descriptions-item label="职业" :span="1"> 老师 </el-descriptions-item>
    <el-descriptions-item label="民族" :span="2"> 汉 </el-descriptions-item>
    <el-descriptions-item label="身份证号">
      xxxxxxxxxxxxxxxxxx
    </el-descriptions-item>
    <el-descriptions-item label="安全带使用情况"> 否 </el-descriptions-item>
    <el-descriptions-item label="头盔使用情况" :span="2">
      否
    </el-descriptions-item>
    <el-descriptions-item label="血液酒精含量">
      200mg/100ml
    </el-descriptions-item>
    <el-descriptions-item label="重点人员"> 否 </el-descriptions-item>
  </el-descriptions>
<el-pagination
    background
    layout="prev, pager, next"
    :total="totalCarPersonnel"
    next-text="下一页"
    prev-text="上一页"
  >
  </el-pagination>
/* 描述列表 */
  .el-descriptions__body {
    background-color: rgba(65, 141, 255, 0.2);
    font-family: Source Han Sans;
    font-size: 12px;
    line-height: 24px;
  }
  .el-descriptions .el-descriptions-item__cell {
    height: 30px;
    padding: 0px 10px;
    line-height: 30px;
    border: 1px solid rgba(65, 141, 255, 0.1);
  }
  .el-descriptions-item__label {
    color: #819cb9;
  }
  .el-descriptions-item__content {
    color: #fff;
  }
  .content_personnel { 
    // 调整第一列的宽度
    .el-descriptions-row > td:nth-child(1) {
      width: 160px !important;
    }
  }
  /* 分页 */
  .el-pagination {
    display: flex;
    justify-content: space-between;
    width: 100%;
    padding: 5px 0px;
  }
  .el-pagination::after,
  .el-pagination::before {
    content: none;
  }
  // 页码
  .el-pagination.is-background .el-pager li {
    width: 30px;
    height: 30px;
    background-color: rgba(65, 141, 255, 0.5);
    border: 1px solid rgba(153, 219, 255, 0.5);
    backdrop-filter: blur(10px);
  }
  // 左右按钮
  .el-pagination.is-background .btn-prev,
  .el-pagination.is-background .btn-next {
    display: inline-block;
    width: 69px;
    height: 30px;
    border-radius: 2px;
    background: rgba(65, 141, 255, 0.5);
    border: 1px solid rgba(153, 219, 255, 0.5);
    backdrop-filter: blur(10px);
    box-shadow: inset 0px 3px 30px 0px rgba(153, 219, 255, 0.3);
    color: #819cb9;
  }
}

<template> <div class="app-container"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"> <el-form-item label="状态" prop="status"> <el-select v-model="queryParams.status"> <el-option v-for="dict in dict.type.status" :key="dict.value" :label="dict.label" :value="dict.value" /> </el-select> </el-form-item> <el-form-item label="排查时间" prop="regDate"> <el-date-picker v-model="regDate" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" /> </el-form-item> <el-form-item> <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button> <el-button icon="el-icon-refresh" size="mini" @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="el-icon-plus" size="mini" @click="handleAdd" v-hasPermi="['safety:pitfall:record:add']">新增</el-button> </el-col> <el-col :span="1.5"> <el-button type="success" plain icon="el-icon-edit" size="mini" :disabled="single" @click="handleUpdate" v-hasPermi="['safety:pitfall:record:edit']">修改</el-button> </el-col> <el-col :span="1.5"> <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple" @click="handleDelete" v-hasPermi="['safety:pitfall:record:remove']">删除</el-button> </el-col> <el-col :span="1.5"> <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport" v-hasPermi="['safety:pitfall:record:export']">导出</el-button> </el-col> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar> </el-row> <el-table v-loading="loading" :data="RECORDList" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55" align="center" /> <!-- <el-table-column label="记录ID" align="center" prop="recordId" /> --> <!-- <el-table-column label="任务ID" align="center" prop="taskId" /> --> <!-- <el-table-column label="企业ID" align="center" prop="enterpriseId" /> --> <!-- <el-table-column label="企业名称" align="center" prop="companyName"> <template slot-scope="scope"> <el-button type="text" @click="$ emit('tap', scope.row)">{{ scope.row.companyName }}</el-button> </template> --> <el-button type=“text” @click=“handleMore(scope.row)”> {{ scope.row.riskEventName }} <el-button size=“mini” type=“text” icon=“el-icon-s-promotion” @click=" ParseError: KaTeX parse error: Expected '}', got 'EOF' at end of input: &hellip;: { companyId: store.getters.companyId }, }) " v-hasPermi=“[‘safety:pitfall:record:edit’]”>整改 <el-button size=“mini” type=“text” icon=“el-icon-edit” @click=“handleUpdate(scope.row)” v-hasPermi=“[‘safety:pitfall:record:edit’]”>修改 <el-button size=“mini” type=“text” icon=“el-icon-delete” @click=“handleDelete(scope.row)” v-hasPermi=“[‘safety:pitfall:record:remove’]”>删除 <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" @pagination="getList" /> <!-- 添加修改隐患排查任务记录对话框 --> <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> <el-form ref="form" :model="form" :rules="rules" size="small" label-width="150px"> <el-form-item label="任务名称" prop="taskId"> <el-select v-model="form.taskId" clearable filterable> <el-option v-for="dict in taskList" :key="dict.taskId" :label="dict.riskEventName" :value="dict.taskId" /> </el-select> </el-form-item> <el-form-item label="状态" prop="status"> <el-select v-model="form.status"> <el-option v-for="dict in dict.type.status" :key="dict.value" :label="dict.label" :value="dict.value" /> </el-select> </el-form-item> <el-form-item label="负责人名称" prop="userName"> <el-input v-model="form.userName" /> </el-form-item> <el-form-item label="排查时间" prop="createTime"> <el-date-picker v-model="form.createTime" type="datetime" value-format="yyyy-MM-dd HH:mm:ss" placeholder="选择日期" /> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> <el-button type="primary" @click="submitForm">确 定</el-button> <el-button @click="cancel">取 消</el-button> </div> </el-dialog> <!-- 关联行业详情 --> <el-drawer :title="detail.title" :visible.sync="detail.show" direction="rtl"> <div style="margin: 0 20px"> <el-descriptions :column="1" size='small' border> <el-descriptions-item label="任务名称"> {{ detail.record.riskEventName }} </el-descriptions-item> <el-descriptions-item label="企业名称"> <el-button type="text" size="small" @click=" $ router.push('/safety/enterprise/' + detail.record.companyId) "> {{ detail.record.companyName }} </el-button> </el-descriptions-item> <el-descriptions-item label="风险分析单元"> {{ detail.record.riskUnit }} </el-descriptions-item> <el-descriptions-item label="管控措施分类"> {{ detail.record.controlCategory }} </el-descriptions-item> <el-descriptions-item label="管控措施描述"> {{ detail.record.controlDesc }} </el-descriptions-item> <el-descriptions-item label="排查内容"> {{ detail.record.inspectionContent }} </el-descriptions-item> <el-descriptions-item label="巡检周期"> {{ detail.record.inspectionCycle }} </el-descriptions-item> <el-descriptions-item label="工作日类型"> <dict-tag :options="dict.type.workday_type" :value="detail.record.workdayType" /> </el-descriptions-item> <el-descriptions-item label="工作开始时间"> {{ detail.record.workEndTime }} </el-descriptions-item> <el-descriptions-item label="工作结束时间"> {{ detail.record.workEndTime }} </el-descriptions-item> <el-descriptions-item label="任务类型"> <dict-tag :options="dict.type.task_type" :value="detail.record.taskType" /> </el-descriptions-item> <el-descriptions-item label="包保任务对应项"> {{ detail.record.relatedItem }} </el-descriptions-item> <el-descriptions-item label="状态"> <dict-tag :options="dict.type.status" :value="detail.record.status" /> </el-descriptions-item> <el-descriptions-item label="创建时间"> {{ detail.record.createTime }} </el-descriptions-item> <el-descriptions-item label="更新时间"> {{ detail.record.updateTime }} </el-descriptions-item> </el-descriptions> </div> </el-drawer> </div> </template> <script> import dayjs from "dayjs"; import { listRECORD, getRECORD, delRECORD, addRECORD, updateRECORD, } from "@/api/system/riskInspectionTaskRecord"; import { taskList } from "@/api/system/TASK"; export default { name: "record", dicts: ["status"], data() { return { // 遮罩层 loading: true, // 选中数组 ids: [], // 非单个禁用 single: true, // 非多个禁用 multiple: true, // 显示搜索条件 showSearch: true, // 总条数 total: 0, // 隐患排查任务记录表格数据 RECORDList: [], // 关联任务列表 taskList: [], // 弹出层标题 title: "", // 是否显示弹出层 open: false, regDate: [], // 查询参数 queryParams: { pageNum: 1, pageSize: 10, taskId: null, enterpriseId: null, enterpriseName: null, riskEventName: null, userId: null, userName: null, status: null, createTime: null, }, // 表单参数 form: {}, // 表单校验 rules: { taskId: [ { required: true, message: "任务ID不能为空", trigger: "blur" }, ], enterpriseId: [ { required: true, message: "企业ID不能为空", trigger: "blur" }, ], enterpriseName: [ { required: true, message: "企业名称不能为空", trigger: "blur" }, ], riskEventName: [ { required: true, message: "风险事件名称不能为空", trigger: "blur" }, ], // userId: [ // { required: true, message: "负责人id不能为空", trigger: "blur" } // ], // userName: [ // { required: true, message: "负责人名称不能为空", trigger: "blur" } // ], }, detail: { show: false, title: "详情", record: {}, }, }; }, async created() { await this.getTaskList(); this.getList(); }, methods: { handleMore({ riskEventName, taskId }) { const record = this.taskList.find((item) => item.taskId === taskId); this.detail = { show: true, title: riskEventName + "详情", record, }; }, getTaskList() { return new Promise((resolve, reject) => { taskList().then((response) => { this.taskList = response.data; resolve(); }); }); }, /** 查询隐患排查任务记录列表 */ getList() { this.loading = true; listRECORD(this.queryParams).then((response) => { this.RECORDList = response.rows; console.log(this.RECORDList) this.total = response.total; this.loading = false; }); }, // 取消按钮 cancel() { this.open = false; this.reset(); }, // 表单重置 reset() { this.form = { recordId: null, taskId: null, enterpriseId: null, enterpriseName: null, riskEventName: null, userId: null, userName: null, status: null, createTime: null, }; this.resetForm("form"); }, /** 搜索按钮操作 */ handleQuery() { this.queryParams.pageNum = 1; const [startTime, endTime] = this.regDate; this.queryParams.createStartTime = startTime ? dayjs(startTime).startOf("day").format("YYYY-MM-DD HH:mm:ss") : null; this.queryParams.createEndTime = endTime ? dayjs(endTime).endOf("day").format("YYYY-MM-DD HH:mm:ss") : null; this.getList(); }, /** 重置按钮操作 */ resetQuery() { this.regDate = [] this.resetForm("queryForm"); this.handleQuery(); }, // 多选框选中数据 handleSelectionChange(selection) { this.ids = selection.map((item) => item.recordId); this.single = selection.length !== 1; this.multiple = !selection.length; }, /** 新增按钮操作 */ handleAdd() { this.reset(); this.open = true; this.title = "添加隐患排查任务记录"; }, /** 修改按钮操作 */ handleUpdate(row) { this.reset(); const recordId = row.recordId || this.ids; getRECORD(recordId).then((response) => { this.form = response.data; this.open = true; this.title = "修改隐患排查任务记录"; }); }, /** 提交按钮 */ submitForm() { this.$ refs["form"].validate((valid) => { if (valid) { if (this.form.recordId != null) { updateRECORD(this.form).then((response) => { this.$ modal.msgSuccess("修改成功"); this.open = false; this.getList(); }); } else { addRECORD(this.form).then((response) => { this.$ modal.msgSuccess("新增成功"); this.open = false; this.getList(); }); } } }); }, /** 删除按钮操作 */ handleDelete(row) { const recordIds = row.recordId || this.ids; this.$ modal .confirm( '是否确认删除隐患排查任务记录编号为"' + recordIds + '"的数据项?' ) .then(function () { return delRECORD(recordIds); }) .then(() => { this.getList(); this.$ modal.msgSuccess("删除成功"); }) .catch(() => { }); }, /** 导出按钮操作 */ handleExport() { if (this.RECORDList.length === 0) { this.$ modal.msgWarning("没有数据可导出"); return; } try { const XLSX = require("xlsx"); // 明确指定需要导出的字段及对应的中文表头 const exportFields = [ { key: 'riskEventName', label: '任务名称' }, { key: 'userName', label: '负责人名称' }, { key: 'status', label: '状态' }, { key: 'createTime', label: '排查时间' }, ]; // 生成表头 const headers = exportFields.map(field => field.label); // 生成数据行 const rows = this.RECORDList.map(item => { return exportFields.map(field => { // 处理可能不存在的字段或null值 const value = item[field.key] || ''; // 特殊处理日期格式(根据实际需要调整) if (field.key === 'regDate' && value) { return dayjs(value).format('YYYY-MM-DD'); } return value; }); }); // 合表头和数据 const exportData = [headers, ...rows]; // 创建 workbook 和 worksheet const wb = XLSX.utils.book_new(); const ws = XLSX.utils.aoa_to_sheet(exportData); // 设置列宽(可选) const colWidths = [ { wch: 40 }, { wch: 25 }, { wch: 15 }, { wch: 30 }, ]; ws['!cols'] = colWidths; XLSX.utils.book_append_sheet(wb, ws, "排查任务记录"); XLSX.writeFile(wb, `排查任务记录_${new Date().getTime()}.xlsx`); } catch (error) { console.error("导出失败:", error); this.$ modal.msgError("导出失败,请稍后重试"); } } }, }; </script>前端需要改能解决上面那个报错
最新发布
07-18
我用的是node10版本的 下面是我的列表页面和详情页面的代码,有一些问题,需要你解决 1.列表前端代码 /** * 设备管理-设备台账页面 * * @author gucw * @date 2025-06-06 */ <template> <div class="mod-config padding"> <el-form :inline="true" :model="dataForm" ref="form" @keyup.enter.native="getDataList()" > <el-form-item label="设备编码" prop="equipmentCode" class="serach-form-item" > <el-input clearable v-model="dataForm.equipmentCode" placeholder="请输入设备编码" ></el-input> </el-form-item> <el-form-item label="设备大类" prop="equipmentCategory"> <el-select clearable v-model="dataForm.equipmentCategory" :placeholder="'请选择设备大类'" > <el-option v-for="(item, index) in equipment_category" :key="item.cId" :label="item.entryname" :value="item.entrycode" ></el-option> </el-select> </el-form-item> <el-form-item label="设备小类" prop="equipmentSubcategory"> <el-select clearable v-model="dataForm.equipmentSubcategory" :placeholder="'请选择设备小类'" > <el-option v-for="(item, index) in equipment_subcategory" :key="item.cId" :label="item.entryname" :value="item.entrycode" ></el-option> </el-select> </el-form-item> <el-form-item label="归属类型" prop="ownershipType"> <el-select clearable v-model="dataForm.ownershipType" :placeholder="'请选择归属类型'" > <el-option v-for="(item, index) in ownership_type" :key="item.cId" :label="item.entryname" :value="item.entrycode" ></el-option> </el-select> </el-form-item> <el-form-item label="设备归属方" prop="equipmentOwner" class="serach-form-item" > <el-input clearable v-model="dataForm.equipmentOwner" placeholder="请输入设备归属方" ></el-input> </el-form-item> <el-form-item label="存放位置" prop="storageLocation" class="serach-form-item" > <el-input clearable v-model="dataForm.storageLocation" placeholder="请输入存放位置" ></el-input> </el-form-item> <el-form-item label="最后检定日期"> <el-date-picker v-model="lastVerificationDateList" type="daterange" range-separator="-" value-format="yyyy-MM-dd" start-placeholder="开始日期" end-placeholder=" 结束日期" style="width: 100%" ></el-date-picker> </el-form-item> <el-form-item label="设备状态" prop="equipmentStatus"> <el-select clearable v-model="dataForm.equipmentStatus" :placeholder="'请选择设备状态'" > <el-option v-for="(item, index) in equipment_status" :key="item.cId" :label="item.entryname" :value="item.entrycode" ></el-option> </el-select> </el-form-item> <el-form-item label="仓储状态" prop="storageStatus"> <el-select clearable v-model="dataForm.storageStatus" :placeholder="'请选择仓储状态'" > <el-option v-for="(item, index) in storage_status" :key="item.cId" :label="item.entryname" :value="item.entrycode" ></el-option> </el-select> </el-form-item> <el-form-item label="检测状态" prop="inspectionStatus"> <el-select clearable v-model="dataForm.inspectionStatus" :placeholder="'请选择检测状态'" > <el-option v-for="(item, index) in inspection_status" :key="item.cId" :label="item.entryname" :value="item.entrycode" ></el-option> </el-select> </el-form-item> <el-form-item> <el-button v-if="isAuth('cmmsEquipmentInfo:cmmsEquipmentInfo:list')" @click="getDataList()" type="primary" >查询</el-button > <el-button v-if="isAuth('cmmsEquipmentInfo:cmmsEquipmentInfo:list')" @click="resetForm('form')" >重置</el-button > <el-button v-if="isAuth('cmmsEquipmentInfo:cmmsEquipmentInfo:add')" type="primary" @click="addOrUpdateHandle()" >新增</el-button > <el-button v-if="isAuth('cmmsEquipmentInfo:cmmsEquipmentInfo:remove')" type="danger" @click="deleteHandle()" >批量删除</el-button > </el-form-item> </el-form> <EproTable class="m-t-10" :tableData="dataList" :titleData="titleForm" :optionData="optionData" :disselected="false" @tableSelect="getTableSelect" v-loading="tableLoading" > <el-table-column slot="action" fixed="right" label="操作" align="center" width="110" > <template slot-scope="scope"> <el-tooltip content="查看详情" placement="top"> <div class="iconfont icon-chakan click iconStyle pifu" @click.stop="showDetailHandle(scope.row)" ></div> </el-tooltip> <el-tooltip content="编辑" placement="top" v-if="isAuth('cmmsEquipmentInfo:cmmsEquipmentInfo:edit')" > <div class="iconfont icon-edit click iconStyle pifu" @click.stop="addOrUpdateHandle(scope.row)" ></div> </el-tooltip> <el-tooltip content="删除" placement="top" v-if="isAuth('cmmsEquipmentInfo:cmmsEquipmentInfo:remove')" > <div class="iconfont icon-delete click iconStyle pifu" @click.stop="deleteHandle(scope.row.id)" ></div> </el-tooltip> </template> </el-table-column> </EproTable> <el-pagination background @size-change="sizeChangeHandle" @current-change="currentChangeHandle" :current-page="pageIndex" :page-sizes="[10, 20, 50, 100]" :page-size="pageSize" :total="totalCount" layout="total, sizes, prev, pager, next, jumper" > </el-pagination> <!-- 弹窗, 新增 / 修改 --> <add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList" ></add-or-update> <detail ref="detail" @closed="handleDetailClosed"></detail> </div> </template> <script> import AddOrUpdate from "./cmmsEquipmentInfoAddAndUpdate"; import { listCmmsEquipmentInfo, delCmmsEquipmentInfo, } from "@/api/cmmsEquipmentInfo/cmmsEquipmentInfo.js"; import EproTable from "@/components/epro-table/epro-table"; import { getDictionaries } from "@/utils"; import Detail from "./cmmsEquipmentInfoDetail"; export default { data() { return { dataList: [], pageIndex: 1, pageSize: 10, totalCount: 0, tableLoading: false, dataListSelections: [], addOrUpdateVisible: false, equipment_category: [], equipment_subcategory: [], accuracy_level: [], ownership_type: [], purchaseDateList: [], lastVerificationDateList: [], equipment_status: [], storage_status: [], inspection_status: [], optionData: { equipmentCode: { width: "150px" }, equipmentCategoryDict: { width: "150px" }, equipmentSubcategoryDict: { width: "150px" }, ownershipTypeDict: { width: "150px" }, equipmentOwner: { width: "150px" }, purchaseDate: { width: "150px" }, lastVerificationDate: { width: "150px" }, equipmentStatusDict: { width: "150px" }, storageStatusDict: { width: "150px" }, inspectionStatusDict: { width: "150px" }, }, titleForm: { equipmentCode: "设备编码", equipmentCategoryDict: "设备大类", equipmentSubcategoryDict: "设备小类", ownershipTypeDict: "归属类型", equipmentOwner: "设备归属方", purchaseDate: "采购日期", lastVerificationDate: "最后检定日期", equipmentStatusDict: "设备状态", storageStatusDict: "仓储状态", inspectionStatusDict: "检测状态", }, dataForm: { id: null, equipmentCode: null, equipmentCategory: null, equipmentSubcategory: null, ownershipType: null, equipmentOwner: null, purchaseDate: null, storageLocation: null, lastVerificationDate: null, equipmentStatus: null, storageStatus: null, inspectionStatus: null, }, }; }, components: { AddOrUpdate, EproTable, Detail, }, async activated() { await this.getDictionaries(); this.getDataList(); }, methods: { // 获取table数据 getTableSelect(val) { this.dataListSelections = val; }, // 查看详情方法 showDetailHandle(row) { this.$nextTick(() => { this.$refs.detail.init(row); }); }, // 优化后的获取数据方法 async getDataList() { this.$set(this.dataForm, "page", this.pageIndex); this.$set(this.dataForm, "limit", this.pageSize); this.setDateRangeParams(); this.tableLoading = true; try { const { data } = await listCmmsEquipmentInfo(this.dataForm); this.dataList = this.transformDictValues(data.page.list); this.totalCount = data.page.totalCount; } catch (error) { console.error("获取数据失败:", error); } finally { this.tableLoading = false; } }, // 设置日期范围参数 setDateRangeParams() { this.$set( this.dataForm, "beginpurchaseDate", this.purchaseDateList[0] || null ); this.$set( this.dataForm, "endpurchaseDate", this.purchaseDateList[1] || null ); this.$set( this.dataForm, "beginlastVerificationDate", this.lastVerificationDateList[0] || null ); this.$set( this.dataForm, "endlastVerificationDate", this.lastVerificationDateList[1] || null ); }, // 获取字典 getDictionaries() { return new Promise((resolve) => { let arr = [ "equipment_category", "equipment_subcategory", "accuracy_level", "ownership_type", "equipment_status", "storage_status", "inspection_status", "model_description", "specification_model", ]; getDictionaries(arr).then((data) => { this.equipment_category = data["equipment_category"]; this.equipment_subcategory = data["equipment_subcategory"]; this.accuracy_level = data["accuracy_level"]; this.ownership_type = data["ownership_type"]; this.equipment_status = data["equipment_status"]; this.storage_status = data["storage_status"]; this.inspection_status = data["inspection_status"]; this.model_description = data["model_description"]; this.specification_model = data["specification_model"]; resolve(); }); }); }, handleDetailClosed() { // 这可以添加关闭后的处理逻辑 }, // 新增方法:转换字典值 transformDictValues(list) { return list.map((item) => { return { ...item, equipmentCategoryDict: this.getDictLabel( "equipment_category", item.equipmentCategory ), equipmentSubcategoryDict: this.getDictLabel( "equipment_subcategory", item.equipmentSubcategory ), ownershipTypeDict: this.getDictLabel( "ownership_type", item.ownershipType ), equipmentStatusDict: this.getDictLabel( "equipment_status", item.equipmentStatus ), storageStatusDict: this.getDictLabel( "storage_status", item.storageStatus ), inspectionStatusDict: this.getDictLabel( "inspection_status", item.inspectionStatus ), }; }); }, // 新增方法:根据字典值和代码获取标签 getDictLabel(dictType, value) { const dict = this[dictType] || []; const item = dict.find((d) => d.entrycode === value); return item ? item.entryname : value; }, // 每页数 sizeChangeHandle(val) { this.pageSize = val; this.pageIndex = 1; this.getDataList(); }, // 当前页 currentChangeHandle(val) { this.pageIndex = val; this.getDataList(); }, //重置表格 resetForm(formName) { this.$refs[formName].resetFields(); this.purchaseDateList = []; this.lastVerificationDateList = []; this.getDataList(); }, // 新增 / 修改 addOrUpdateHandle(data) { this.addOrUpdateVisible = true; this.$nextTick(() => { this.$refs.addOrUpdate.init(data); }); }, // 删除 deleteHandle(id) { if (this.dataListSelections.length === 0 && !id) { this.$message({ message: "请选择数据", type: "warning", }); return; } var ids = id ? [id] : this.dataListSelections.map((item) => { return item.id; }); this.$confirm( `确定进行[${ids.length == 1 ? "删除" : "批量删除"}]操作?`, "提示", { confirmButtonText: "确定", cancelButtonText: "取消", type: "warning", } ).then(() => { delCmmsEquipmentInfo(ids).then(({ data }) => { if (data.code === 0) { this.getDataList(); this.$message.success("删除成功"); } else { this.$message.error(data.msg); } }); }); }, }, }; </script> 2.详情页面代码 <template> <dialog-edit :visible.sync="open" :title="activeTitle" @close="handleDialogClose" @changeTab="handleTabChange" dialogType="dialog_detail" :menuTab="pageMenuTab" :reserve="true" width="900px" height="650px" > <!-- 设备台账详情页 --> <template v-slot:equipmentDetail> <div class="dialog-content-wrap"> <formlist v-if="dictLoaded" :form="form" :form2="formData" :dictData="dictData" ref="formList" :readonly="true" :width="'120px'" /> </div> </template> <!-- 气量检测页 --> <template v-slot:GasMeasurement> <div class="dialog-content-wrap" v-if="GasMeasurementReady"> <gas-detection ref="GasMeasurementRef" :equipment-id="currentEquipmentId" @on-new="handleNewDetection" @on-delete="handleDeleteDetection" /> </div> </template> <template v-slot:footer> <div class="dialog_footer"> <el-button @click="handleCancel">关闭</el-button> </div> </template> </dialog-edit> </template> <script> import { getDictionaries } from "@/utils"; import GasMeasurement from "../cmmsGasMeasurement/cmmsGasMeasurement.vue"; // 需要导入API函数 import { getCmmsEquipmentInfo } from "@/api/cmmsEquipmentInfo/cmmsEquipmentInfo.js"; export default { name: "EquipmentDetailDialog", components: { GasMeasurement, }, data() { return { dictLoaded: false, form: [ { arr: [ { code: "equipmentCode", title: "设备编码", type: 0, readonly: true, verification: true, rule: "0", customTips: "", regular: "", dictionary: "", }, { code: "equipmentCategory", title: "设备大类", type: 1, readonly: true, verification: true, rule: "0", customTips: "请选择设备大类", dictionary: "equipment_category", }, { code: "equipmentSubcategory", title: "设备小类", type: 1, readonly: true, verification: true, rule: "0", customTips: "请选择设备小类", dictionary: "equipment_subcategory", }, { code: "modelDescription", title: "燃气表型号描述", type: 0, readonly: true, verification: true, rule: "0", customTips: "燃气表的具体型号描述", regular: "", }, { code: "specificationModel", title: "规格型号", type: 0, readonly: true, verification: true, rule: "0", customTips: "设备的规格型号", regular: "", }, { code: "accuracyLevel", title: "器具准确度等级", type: 1, readonly: true, verification: true, rule: "0", customTips: "请选择准确度等级", dictionary: "accuracy_level", }, { code: "manufacturer", title: "器具生产单位", type: 0, readonly: true, verification: true, rule: "0", customTips: "设备的生产厂家", regular: "", }, { code: "ownershipType", title: "归属类型", type: 1, readonly: true, verification: true, rule: "0", customTips: "请选择设备归属类型", dictionary: "ownership_type", }, { code: "equipmentOwner", title: "设备归属方", type: 0, readonly: true, verification: true, rule: "0", customTips: "设备的所有者", regular: "", }, { code: "purchaseDate", title: "采购日期", type: 6, readonly: true, verification: true, rule: "0", customTips: "请选择采购日期", dateType: "date", dateFormat: "yyyy-MM-dd", }, { code: "storageLocation", title: "存放位置", type: 0, readonly: true, verification: true, rule: "0", customTips: "设备当前的存放位置", regular: "", }, { code: "overdueYears", title: "超期年限(年)", type: 3, readonly: true, verification: true, rule: "0", customTips: "超出检定有效期的年限", regular: "^[0-9]{1,2}$", min: 0, max: 20, }, { code: "lastVerificationDate", title: "最后检定日期", type: 6, readonly: true, verification: true, rule: "0", customTips: "请选择最后检定日期", dateType: "date", dateFormat: "yyyy-MM-dd", }, { code: "equipmentStatus", title: "设备状态", type: 1, readonly: true, verification: true, rule: "0", customTips: "请选择设备当前状态", dictionary: "equipment_status", }, { code: "storageStatus", title: "仓储状态", type: 1, readonly: true, verification: true, rule: "0", customTips: "请选择仓储状态", dictionary: "storage_status", }, { code: "inspectionStatus", title: "检测状态", type: 1, readonly: true, verification: true, rule: "0", customTips: "请选择检测状态", dictionary: "inspection_status", }, { code: "equipmentPhoto", title: "设备照片", type: 30, readonly: true, verification: true, rule: "0", customTips: "请上传设备照片", multiple: false, fileNum: 1, accept: "image/jpeg,image/png", maxSize: 5, }, { code: "remarks", title: "备注", type: 2, readonly: true, verification: true, rule: "0", customTips: "请填写备注信息", rows: 4, }, ], }, ], formData: {}, open: false, dictData: {}, active: "equipmentDetail", activeTitle: "设备详情", currentEquipmentId: null, GasMeasurementReady: false, pageMenuTab: [ { title: "基础信息", sxTitle: "equipmentDetail", hide: false, icon: "el-icon-document", }, { title: "气量监测", sxTitle: "GasMeasurement", hide: false, icon: "el-icon-data-line", }, ], }; }, methods: { async init(row) { this.open = true; this.active = "equipmentDetail"; this.activeTitle = "基础详情"; this.currentEquipmentId = row.id; this.dictLoaded = false; this.GasMeasurementReady = false; this.formData = {}; try { // 兼容性写法替代 Promise.allSettled const dictPromise = this.loadDictData().then( value => ({ status: 'fulfilled', value }), reason => ({ status: 'rejected', reason }) ); const detailPromise = this.loadEquipmentDetail(row.id).then( value => ({ status: 'fulfilled', value }), reason => ({ status: 'rejected', reason }) ); const [dictResult, detailResult] = await Promise.all([dictPromise, detailPromise]); // 处理字典加载结果 if (dictResult.status === 'rejected') { console.error("字典加载失败:", dictResult.reason); } // 处理设备详情加载结果 if (detailResult.status === 'rejected') { console.error("设备详情加载失败:", detailResult.reason); this.useRowDataAsFallback(row); // 使用回退数据 } else if (detailResult.status === 'fulfilled') { this.formData = detailResult.value; } this.dictLoaded = true; } catch (error) { console.error("初始化异常:", error); this.useRowDataAsFallback(row); // 使用回退数据 this.dictLoaded = true; } }, async loadEquipmentDetail(equipmentId) { try { const response = await getCmmsEquipmentInfo(equipmentId); // 增加响应为 undefined 的检查 if (!response) { throw new Error("API返回空响应"); } // 检查响应结构,避免访问 undefined.data if (response.data.code === 0 && response.data.data) { const detailData = response.data.data; return { ...detailData, purchaseDate: detailData.purchaseDate ? this.formatDate(detailData.purchaseDate) : null, lastVerificationDate: detailData.lastVerificationDate ? this.formatDate(detailData.lastVerificationDate) : null }; } else { throw new Error(response.data.msg || "设备详情数据格式错误"); } } catch (error) { throw new Error(`加载设备详情失败: ${error.message}`); } }, async loadDictData() { const dictKeys = [ "equipment_category", "equipment_subcategory", "accuracy_level", "ownership_type", "equipment_status", "storage_status", "inspection_status", ]; try { const data = await getDictionaries(dictKeys); this.dictData = Object.fromEntries( dictKeys.map((key) => [key, data[key] || []]) ); } catch (error) { console.error("加载字典数据失败:", error); this.dictData = Object.fromEntries(dictKeys.map((key) => [key, []])); } }, formatDate(dateString) { return dateString ? new Date(dateString).toISOString().split("T")[0] : null; }, // 添加这个方法 handleDialogClose() { this.handleCancel(); this.$emit("close"); // 确保触发close事件 }, handleCancel() { this.open = false; this.GasMeasurementReady = false; this.$emit("closed"); }, handleTabChange(activeTab) { this.active = activeTab; const activeItem = this.pageMenuTab.find(item => item.sxTitle === activeTab); if (activeItem) { this.activeTitle = activeItem.title; } if (activeTab === "GasMeasurement") { // 确保设备ID已设置后再渲染组件 this.GasMeasurementReady = !!this.currentEquipmentId; this.$nextTick(() => { if (this.$refs.GasMeasurementRef) { this.$refs.GasMeasurementRef.refreshData(); } }); } }, }, mounted() { // 确保组件正常挂载 this.$nextTick(() => { console.log("formList组件实例:", this.$refs.formList); }); } }; </script> <style scoped> .dialog-content-wrap { padding: 15px; height: 100%; overflow: auto; } </style> 我的js文件 import request from '@/utils/httpRequest'; // 查询设备管理-设备台账列表 export function listCmmsEquipmentInfo(query) { return request({ url: request.adornUrl('/cmmsEquipmentInfo/cmmsEquipmentInfo/page-list'), method: 'get', params: query }) } // 查询设备管理-设备台账详细 export function getCmmsEquipmentInfo(id) { return request({ url: request.adornUrl('/cmmsEquipmentInfo/cmmsEquipmentInfo/info/' + id), method: 'get' }) } // 新增设备管理-设备台账 export function addCmmsEquipmentInfo(data) { return request({ url: request.adornUrl('/cmmsEquipmentInfo/cmmsEquipmentInfo/add'), method: 'post', data: data }) } // 修改设备管理-设备台账 export function updateCmmsEquipmentInfo(data) { return request({ url: request.adornUrl('/cmmsEquipmentInfo/cmmsEquipmentInfo/update'), method: 'post', data: data }) } // 删除设备管理-设备台账 export function delCmmsEquipmentInfo(data) { return request({ url: request.adornUrl('/cmmsEquipmentInfo/cmmsEquipmentInfo/delete'), method: 'post', data: data }) } 问题是,详情的页面怎么展示不出来
06-11
现有接口3. 合同查询 3.1 部门合同查询 接口 URL /contract/query/index 请求方法 GET 功能描述 查询当前部门内的所有合同(部分信息展示:仅标题、状态等字段)。 权限要求 权限标识:contract:query:list(仅限角色 id=100 用户及部门管理员查看完整合同信息) 请求 Header 示例 { "deptId": 2001 } 响应示例 { "code": 200, "msg": "操作成功", "data": [ { "contractId": 1001, "contractName": "实验室器材采购合同", "currentStatus": "PENDING", "type": "采购", "createTime": "2025-05-20 19:35:00" }, { "contractId": 1002, "contractName": "设备租赁合同", "currentStatus": "APPROVED", "type": "租赁", "createTime": "2025-05-19 16:20:00" } ] } 3.2 合同详情查询 接口 URL /contract/query/query 请求方法 GET 功能描述 根据合同 ID 查询合同的详细信息,包含审批流程和附件信息(权限校验返回不同详情层级)。 请求参数 -contractId(必填) 响应示例 { "code": 200, "msg": "操作成功", "data": { "contractId": 1001, "contractNo": "e4f1a2b3", "contractName": "实验室器材采购合同", "currentStatus": "PENDING", "type": "采购", "description": "采购实验室必备器材", "currentFlowId": 5001, "approvalFlow": { /* 流程详情 */ }, "contractFiles": [ /* 附件列表 */ ] } }和import request from '@/utils/request' // 查询部门合同列表 export function listContract(query) { return request({ url: '/contract/query/index', method: 'get', params: query, headers: { deptId: query.deptId } }) } // 查询合同详情 export function getContractDetail(query) { return request({ url: '/contract/query/query', method: 'get', params: query }) } 请依托于若依框架写一个vue2的文件实现合同查询功能
05-23
以下是基于若依框架和 Vue2 的实现代码,它包括了两个主要功能:部门合同查询和合同详情查询。代码分为两部分:`ContractList.vue`(用于展示部门合同列表)和 `ContractDetail.vue`(用于展示合同详情)。 ### 实现代码 #### 1. `ContractList.vue` (部门合同查询) ```vue <template> <div> <el-card class="box-card"> <div slot="header" class="clearfix"> <span>部门合同查询</span> </div> <el-form :inline="true" :model="queryForm" class="demo-form-inline"> <el-form-item label="部门ID"> <el-input v-model="queryForm.deptId" placeholder="请输入部门ID"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="fetchContractList">查询</el-button> </el-form-item> </el-form> <el-table :data="contractList" style="width: 100%"> <el-table-column prop="contractId" label="合同ID" width="180"></el-table-column> <el-table-column prop="contractName" label="合同名称" width="220"></el-table-column> <el-table-column prop="currentStatus" label="状态" width="180"></el-table-column> <el-table-column prop="type" label="类型" width="180"></el-table-column> <el-table-column prop="createTime" label="创建时间"></el-table-column> <el-table-column label="操作" width="180"> <template slot-scope="scope"> <el-button size="mini" @click="viewContractDetail(scope.row.contractId)">查看详情</el-button> </template> </el-table-column> </el-table> <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="pagination.currentPage" :page-sizes="[10, 20, 50, 100]" :page-size="pagination.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="pagination.total"> </el-pagination> </el-card> </div> </template> <script> import { listContract } from '@/api/contract' export default { data() { return { queryForm: { deptId: '' }, contractList: [], pagination: { currentPage: 1, pageSize: 10, total: 0 } } }, methods: { fetchContractList() { const params = { ...this.queryForm, page: this.pagination.currentPage, limit: this.pagination.pageSize } listContract(params).then(response => { if (response.code === 200) { this.contractList = response.data.list this.pagination.total = response.data.total } }) }, viewContractDetail(contractId) { this.$router.push({ name: 'ContractDetail', params: { contractId } }) }, handleSizeChange(val) { this.pagination.pageSize = val this.fetchContractList() }, handleCurrentChange(val) { this.pagination.currentPage = val this.fetchContractList() } } } </script> ``` #### 2. `ContractDetail.vue` (合同详情查询) ```vue <template> <div> <el-card class="box-card"> <div slot="header" class="clearfix"> <span>合同详情</span> </div> <el-descriptions title="合同信息" :column="2" border> <el-descriptions-item label="合同ID">{{ detail.contractId }}</el-descriptions-item> <el-descriptions-item label="合同编号">{{ detail.contractNo }}</el-descriptions-item> <el-descriptions-item label="合同名称">{{ detail.contractName }}</el-descriptions-item> <el-descriptions-item label="当前状态">{{ detail.currentStatus }}</el-descriptions-item> <el-descriptions-item label="合同类型">{{ detail.type }}</el-descriptions-item> <el-descriptions-item label="描述">{{ detail.description }}</el-descriptions-item> </el-descriptions> <el-collapse> <el-collapse-item title="审批流程" name="1"> <pre>{{ detail.approvalFlow }}</pre> </el-collapse-item> <el-collapse-item title="附件信息" name="2"> <ul> <li v-for="(file, index) in detail.contractFiles" :key="index">{{ file.name }}</li> </ul> </el-collapse-item> </el-collapse> </el-card> </div> </template> <script> import { getContractDetail } from '@/api/contract' export default { data() { return { detail: {} } }, created() { const contractId = this.$route.params.contractId this.fetchContractDetail(contractId) }, methods: { fetchContractDetail(contractId) { getContractDetail({ contractId }).then(response => { if (response.code === 200) { this.detail = response.data } }) } } } </script> ``` --- ### 代码解释 #### 1. `ContractList.vue` - **模板部分**: - 使用 `el-card` 和 `el-table` 展示合同列表。 - 提供了一个简单的表单用于输入部门 ID,通过按钮触发查询。 - 每行数据包含一个“查看详情”按钮,点击后跳转到合同详情页面。 - **逻辑部分**: - 调用 `listContract` 方法获取合同列表。 - 分页功能通过 `el-pagination` 实现,支持动态调整每页显示条数和当前页码。 #### 2. `ContractDetail.vue` - **模板部分**: - 使用 `el-descriptions` 展示合同的基本信息。 - 使用 `el-collapse` 展示审批流程和附件信息。 - **逻辑部分**: - 在组件创建时从路由参数中获取 `contractId`,调用 `getContractDetail` 方法获取合同详情。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值