| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <el-form |
| | | :model="queryParams" |
| | | ref="queryRef" |
| | | :inline="true" |
| | | v-show="showSearch" |
| | | label-width="90px" |
| | | > |
| | | <el-form-item label="资产名称" prop="assetName"> |
| | | <el-form :model="filters" :inline="true"> |
| | | <el-form-item label="项目名称"> |
| | | <el-input |
| | | v-model="queryParams.assetName" |
| | | placeholder="请输入资产名称" |
| | | clearable |
| | | style="width: 220px" |
| | | @keyup.enter="handleQuery" |
| | | v-model="filters.deviceName" |
| | | style="width: 240px" |
| | | placeholder="请输入项目名称" |
| | | clearable |
| | | :prefix-icon="Search" |
| | | @change="getTableData" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="资产编号" prop="assetCode"> |
| | | <el-form-item label="合同编号"> |
| | | <el-input |
| | | v-model="queryParams.assetCode" |
| | | placeholder="请输入资产编号" |
| | | clearable |
| | | style="width: 240px" |
| | | @keyup.enter="handleQuery" |
| | | v-model="filters.deviceModel" |
| | | style="width: 240px" |
| | | placeholder="请输入合同编号" |
| | | clearable |
| | | :prefix-icon="Search" |
| | | @change="getTableData" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="所属承包商" prop="contractorId"> |
| | | <el-select |
| | | v-model="queryParams.contractorId" |
| | | placeholder="请选择承包商" |
| | | clearable |
| | | style="width: 240px" |
| | | > |
| | | <el-option |
| | | v-for="contractor in contractorOptions" |
| | | :key="contractor.contractorId" |
| | | :label="contractor.contractorName" |
| | | :value="contractor.contractorId" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="资产状态" prop="status"> |
| | | <el-select |
| | | v-model="queryParams.status" |
| | | placeholder="资产状态" |
| | | clearable |
| | | style="width: 240px" |
| | | > |
| | | <el-option |
| | | v-for="dict in asset_status" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | /> |
| | | </el-select> |
| | | <el-form-item label="录入日期:"> |
| | | <el-date-picker v-model="filters.entryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="daterange" |
| | | placeholder="请选择" clearable @change="changeDaterange" /> |
| | | </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-button type="primary" @click="getTableData">搜索</el-button> |
| | | <el-button @click="resetFilters">重置</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" |
| | | >新增</el-button |
| | | > |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="success" |
| | | plain |
| | | icon="Edit" |
| | | :disabled="single" |
| | | @click="handleUpdate" |
| | | >修改</el-button |
| | | > |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="danger" |
| | | plain |
| | | icon="Delete" |
| | | :disabled="multiple" |
| | | @click="handleDelete" |
| | | >删除</el-button |
| | | > |
| | | </el-col> |
| | | <right-toolbar |
| | | v-model:showSearch="showSearch" |
| | | @queryTable="getList" |
| | | :columns="columns" |
| | | ></right-toolbar> |
| | | </el-row> |
| | | |
| | | <el-table |
| | | v-loading="loading" |
| | | :data="assetList" |
| | | @selection-change="handleSelectionChange" |
| | | stripe |
| | | > |
| | | <el-table-column type="selection" width="50" align="center" /> |
| | | <el-table-column |
| | | label="资产编号" |
| | | align="center" |
| | | key="assetId" |
| | | prop="assetId" |
| | | v-if="columns[0].visible" |
| | | /> |
| | | <el-table-column |
| | | label="资产名称" |
| | | align="center" |
| | | key="assetName" |
| | | prop="assetName" |
| | | v-if="columns[1].visible" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | label="资产编号" |
| | | align="center" |
| | | key="assetCode" |
| | | prop="assetCode" |
| | | v-if="columns[2].visible" |
| | | /> |
| | | <el-table-column |
| | | label="所属承包商" |
| | | align="center" |
| | | key="contractorName" |
| | | prop="contractorName" |
| | | v-if="columns[3].visible" |
| | | :show-overflow-tooltip="true" |
| | | /> |
| | | <el-table-column |
| | | label="资产类型" |
| | | align="center" |
| | | key="assetType" |
| | | prop="assetType" |
| | | v-if="columns[4].visible" |
| | | > |
| | | <template #default="scope"> |
| | | {{ getAssetTypeLabel(scope.row.assetType) }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="资产价值" |
| | | align="center" |
| | | key="assetValue" |
| | | prop="assetValue" |
| | | v-if="columns[5].visible" |
| | | > |
| | | <template #default="scope"> |
| | | {{ scope.row.assetValue.toFixed(2) }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="状态" |
| | | align="center" |
| | | key="status" |
| | | v-if="columns[6].visible" |
| | | > |
| | | <template #default="scope"> |
| | | <el-switch |
| | | v-model="scope.row.status" |
| | | active-value="0" |
| | | inactive-value="1" |
| | | @change="handleStatusChange(scope.row)" |
| | | ></el-switch> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="创建时间" |
| | | align="center" |
| | | prop="createTime" |
| | | v-if="columns[7].visible" |
| | | width="160" |
| | | > |
| | | <template #default="scope"> |
| | | <span>{{ parseTime(scope.row.createTime) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="操作" |
| | | align="center" |
| | | width="150" |
| | | class-name="small-padding fixed-width" |
| | | > |
| | | <template #default="scope"> |
| | | <el-tooltip |
| | | content="修改" |
| | | placement="top" |
| | | > |
| | | <el-button |
| | | link |
| | | type="primary" |
| | | icon="Edit" |
| | | @click="handleUpdate(scope.row)" |
| | | ></el-button> |
| | | </el-tooltip> |
| | | <el-tooltip |
| | | content="删除" |
| | | placement="top" |
| | | > |
| | | <el-button |
| | | link |
| | | type="primary" |
| | | <div class="table_list"> |
| | | <div class="actions"> |
| | | <div></div> |
| | | <div> |
| | | <el-button type="primary" @click="add" icon="Plus"> 新增 </el-button> |
| | | <el-button |
| | | type="danger" |
| | | icon="Delete" |
| | | @click="handleDelete(scope.row)" |
| | | ></el-button> |
| | | </el-tooltip> |
| | | </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="600px" append-to-body> |
| | | <el-form :model="form" :rules="rules" ref="assetRef" label-width="80px"> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="资产名称" prop="assetName"> |
| | | <el-input |
| | | v-model="form.assetName" |
| | | placeholder="请输入资产名称" |
| | | maxlength="50" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="资产编号" prop="assetCode"> |
| | | <el-input |
| | | v-model="form.assetCode" |
| | | placeholder="请输入资产编号" |
| | | maxlength="20" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="所属承包商" prop="contractorId"> |
| | | <el-select |
| | | v-model="form.contractorId" |
| | | placeholder="请选择承包商" |
| | | clearable |
| | | > |
| | | <el-option |
| | | v-for="contractor in contractorOptions" |
| | | :key="contractor.contractorId" |
| | | :label="contractor.contractorName" |
| | | :value="contractor.contractorId" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="资产类型" prop="assetType"> |
| | | <el-select |
| | | v-model="form.assetType" |
| | | placeholder="请选择资产类型" |
| | | clearable |
| | | > |
| | | <el-option |
| | | v-for="type in asset_types" |
| | | :key="type.value" |
| | | :label="type.label" |
| | | :value="type.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="资产价值" prop="assetValue"> |
| | | <el-input |
| | | v-model="form.assetValue" |
| | | placeholder="请输入资产价值" |
| | | type="number" |
| | | step="0.01" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="状态"> |
| | | <el-radio-group v-model="form.status"> |
| | | <el-radio |
| | | v-for="dict in sys_normal_disable" |
| | | :key="dict.value" |
| | | :value="dict.value" |
| | | >{{ dict.label }}</el-radio |
| | | > |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="备注"> |
| | | <el-input |
| | | v-model="form.remark" |
| | | type="textarea" |
| | | placeholder="请输入内容" |
| | | ></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <template #footer> |
| | | <div class="dialog-footer"> |
| | | <el-button type="primary" @click="submitForm">确 定</el-button> |
| | | <el-button @click="cancel">取 消</el-button> |
| | | :disabled="multipleList.length <= 0" |
| | | @click="deleteRow(multipleList.map((item) => item.id))" |
| | | > |
| | | 批量删除 |
| | | </el-button> |
| | | </div> |
| | | </template> |
| | | </div> |
| | | <PIMTable |
| | | rowKey="id" |
| | | isSelection |
| | | :column="columns" |
| | | :tableData="dataList" |
| | | :page="{ |
| | | current: pagination.currentPage, |
| | | size: pagination.pageSize, |
| | | total: pagination.total, |
| | | }" |
| | | :isShowSummary="true" |
| | | :summaryMethod="summaryMethod" |
| | | @selection-change="handleSelectionChange" |
| | | @pagination="changePage" |
| | | > |
| | | </PIMTable> |
| | | </div> |
| | | <Modal ref="modalRef" @success="getTableData"></Modal> |
| | | <el-dialog v-model="qrDialogVisible" title="二维码" width="300px"> |
| | | <div style="text-align:center;"> |
| | | <img :src="qrCodeUrl" alt="二维码" style="width:200px;height:200px;" /> |
| | | <div style="margin:10px 0;"> |
| | | <el-button type="primary" @click="downloadQRCode">下载二维码图片</el-button> |
| | | </div> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup name="ContractorAssets"> |
| | | import { ref, reactive, toRefs, watch, onMounted } from 'vue'; |
| | | import { ElMessage } from 'element-plus'; |
| | | import { parseTime } from '@/utils/ruoyi'; |
| | | <script setup> |
| | | import { usePaginationApi } from "@/hooks/usePaginationApi"; |
| | | import { getLedgerPage, delLedger } from "@/api/equipmentManagement/ledger"; |
| | | import { onMounted, getCurrentInstance } from "vue"; |
| | | import Modal from "./Modal.vue"; |
| | | import { ElMessageBox, ElMessage } from "element-plus"; |
| | | import dayjs from "dayjs"; |
| | | import QRCode from "qrcode"; |
| | | import { ref } from "vue"; |
| | | import { summarizeTable } from "@/utils/summarizeTable"; |
| | | import {Search} from "@element-plus/icons-vue"; |
| | | |
| | | const assetList = 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 columns = ref([ |
| | | { key: 0, label: `资产编号`, visible: true }, |
| | | { key: 1, label: `资产名称`, visible: true }, |
| | | { key: 2, label: `资产编号`, visible: true }, |
| | | { key: 3, label: `所属承包商`, visible: true }, |
| | | { key: 4, label: `资产类型`, visible: true }, |
| | | { key: 5, label: `资产价值`, visible: true }, |
| | | { key: 6, label: `状态`, visible: true }, |
| | | { key: 7, label: `创建时间`, visible: true }, |
| | | ]); |
| | | |
| | | const data = reactive({ |
| | | form: { |
| | | assetId: undefined, |
| | | assetName: undefined, |
| | | assetCode: undefined, |
| | | contractorId: undefined, |
| | | contractorName: undefined, |
| | | assetType: undefined, |
| | | assetValue: 0, |
| | | status: "0", |
| | | remark: undefined, |
| | | }, |
| | | queryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | assetName: undefined, |
| | | assetCode: undefined, |
| | | contractorId: undefined, |
| | | status: undefined, |
| | | }, |
| | | rules: { |
| | | assetName: [ |
| | | { required: true, message: "资产名称不能为空", trigger: "blur" }, |
| | | ], |
| | | assetCode: [ |
| | | { required: true, message: "资产编号不能为空", trigger: "blur" }, |
| | | ], |
| | | contractorId: [ |
| | | { required: true, message: "所属承包商不能为空", trigger: "blur" }, |
| | | ], |
| | | assetType: [ |
| | | { required: true, message: "资产类型不能为空", trigger: "blur" }, |
| | | ], |
| | | assetValue: [ |
| | | { required: true, message: "资产价值不能为空", trigger: "blur" }, |
| | | { type: "number", message: "请输入正确的数字", trigger: "blur" }, |
| | | ], |
| | | }, |
| | | defineOptions({ |
| | | name: "设备台账", |
| | | }); |
| | | |
| | | const { queryParams, form, rules } = toRefs(data); |
| | | // 表格多选框选中项 |
| | | const multipleList = ref([]); |
| | | const { proxy } = getCurrentInstance(); |
| | | const modalRef = ref(); |
| | | const qrDialogVisible = ref(false); |
| | | const qrCodeUrl = ref(""); |
| | | const qrRowData = ref(null); |
| | | |
| | | // 模拟承包商数据 |
| | | const contractorOptions = ref([ |
| | | { contractorId: 1, contractorName: "北京建工集团" }, |
| | | { contractorId: 2, contractorName: "上海城建集团" }, |
| | | { contractorId: 3, contractorName: "广州建筑集团" }, |
| | | { contractorId: 4, contractorName: "深圳建工集团" }, |
| | | { contractorId: 5, contractorName: "杭州建工集团" }, |
| | | ]); |
| | | const { |
| | | filters, |
| | | columns, |
| | | dataList, |
| | | pagination, |
| | | getTableData, |
| | | resetFilters, |
| | | onCurrentChange, |
| | | } = usePaginationApi( |
| | | getLedgerPage, |
| | | { |
| | | deviceName: undefined, |
| | | deviceModel: undefined, |
| | | supplierName: undefined, |
| | | unit: undefined, |
| | | entryDateStart: undefined, |
| | | entryDateEnd: undefined, |
| | | }, |
| | | [ |
| | | { |
| | | label: "项目名称", |
| | | align: "center", |
| | | prop: "deviceName", |
| | | }, |
| | | { |
| | | label: "合同编号", |
| | | align: "center", |
| | | prop: "deviceModel", |
| | | }, |
| | | { |
| | | label: "承包商", |
| | | align: "center", |
| | | prop: "supplierName", |
| | | }, |
| | | { |
| | | label: "付款方式", |
| | | align: "center", |
| | | prop: "unit", |
| | | }, |
| | | { |
| | | label: "数量", |
| | | align: "center", |
| | | prop: "number", |
| | | }, |
| | | { |
| | | label: "含税单价", |
| | | align: "center", |
| | | prop: "taxIncludingPriceUnit", |
| | | }, |
| | | { |
| | | label: "含税总价", |
| | | align: "center", |
| | | prop: "taxIncludingPriceTotal", |
| | | }, |
| | | { |
| | | label: "税率", |
| | | align: "center", |
| | | prop: "taxRate", |
| | | }, |
| | | { |
| | | label: "不含税总价", |
| | | align: "center", |
| | | prop: "unTaxIncludingPriceTotal", |
| | | }, |
| | | { |
| | | label: "录入人", |
| | | align: "center", |
| | | prop: "createUser", |
| | | }, |
| | | { |
| | | label: "录入日期", |
| | | align: "center", |
| | | prop: "createTime", |
| | | }, |
| | | { |
| | | dataType: "action", |
| | | label: "操作", |
| | | align: "center", |
| | | fixed: 'right', |
| | | width: 140, |
| | | operation: [ |
| | | { |
| | | name: "编辑", |
| | | type: "text", |
| | | clickFun: (row) => { |
| | | edit(row.id) |
| | | }, |
| | | }, |
| | | ], |
| | | }, |
| | | ] |
| | | ); |
| | | |
| | | // 资产类型字典 |
| | | const asset_types = ref([ |
| | | { value: "equipment", label: "设备" }, |
| | | { value: "material", label: "材料" }, |
| | | { value: "vehicle", label: "车辆" }, |
| | | { value: "tool", label: "工具" }, |
| | | { value: "other", label: "其他" }, |
| | | ]); |
| | | // 多选后做什么 |
| | | const handleSelectionChange = (selectionList) => { |
| | | multipleList.value = selectionList; |
| | | }; |
| | | |
| | | // 资产状态字典 |
| | | const asset_status = ref([ |
| | | { value: "0", label: "正常" }, |
| | | { value: "1", label: "禁用" }, |
| | | { value: "2", label: "维修中" }, |
| | | { value: "3", label: "已报废" }, |
| | | ]); |
| | | const add = () => { |
| | | modalRef.value.openModal(); |
| | | }; |
| | | const edit = (id) => { |
| | | modalRef.value.loadForm(id); |
| | | }; |
| | | const changePage = ({ page, limit }) => { |
| | | pagination.currentPage = page; |
| | | pagination.pageSize = limit; |
| | | onCurrentChange(page); |
| | | }; |
| | | |
| | | // 正常禁用字典 |
| | | const sys_normal_disable = ref([ |
| | | { value: "0", label: "正常" }, |
| | | { value: "1", label: "禁用" }, |
| | | ]); |
| | | // 合计方法 |
| | | const summaryMethod = (param) => { |
| | | return summarizeTable( |
| | | param, |
| | | ['number', 'taxIncludingPriceTotal', 'unTaxIncludingPriceTotal', 'taxIncludingPriceUnit'], |
| | | { |
| | | number: { noDecimal: true }, |
| | | taxIncludingPriceTotal: { decimalPlaces: 2 }, |
| | | unTaxIncludingPriceTotal: { decimalPlaces: 2 } |
| | | } |
| | | ); |
| | | }; |
| | | |
| | | // 模拟资产数据 |
| | | const mockAssets = ref([ |
| | | { |
| | | assetId: 1, |
| | | assetName: "挖掘机", |
| | | assetCode: "ASSET001", |
| | | contractorId: 1, |
| | | contractorName: "北京建工集团", |
| | | assetType: "equipment", |
| | | assetValue: 500000.00, |
| | | status: "0", |
| | | createTime: "2024-01-01 10:00:00", |
| | | remark: "大型挖掘机", |
| | | }, |
| | | { |
| | | assetId: 2, |
| | | assetName: "混凝土搅拌机", |
| | | assetCode: "ASSET002", |
| | | contractorId: 2, |
| | | contractorName: "上海城建集团", |
| | | assetType: "equipment", |
| | | assetValue: 150000.00, |
| | | status: "0", |
| | | createTime: "2024-01-02 10:00:00", |
| | | remark: "混凝土搅拌设备", |
| | | }, |
| | | { |
| | | assetId: 3, |
| | | assetName: "装载机", |
| | | assetCode: "ASSET003", |
| | | contractorId: 3, |
| | | contractorName: "广州建筑集团", |
| | | assetType: "equipment", |
| | | assetValue: 300000.00, |
| | | status: "1", |
| | | createTime: "2024-01-03 10:00:00", |
| | | remark: "装载机设备", |
| | | }, |
| | | { |
| | | assetId: 4, |
| | | assetName: "运输卡车", |
| | | assetCode: "ASSET004", |
| | | contractorId: 4, |
| | | contractorName: "深圳建工集团", |
| | | assetType: "vehicle", |
| | | assetValue: 400000.00, |
| | | status: "0", |
| | | createTime: "2024-01-04 10:00:00", |
| | | remark: "重型运输卡车", |
| | | }, |
| | | { |
| | | assetId: 5, |
| | | assetName: "钢筋切断机", |
| | | assetCode: "ASSET005", |
| | | contractorId: 5, |
| | | contractorName: "杭州建工集团", |
| | | assetType: "tool", |
| | | assetValue: 20000.00, |
| | | status: "0", |
| | | createTime: "2024-01-05 10:00:00", |
| | | remark: "钢筋加工设备", |
| | | }, |
| | | ]); |
| | | |
| | | /** 获取资产类型标签 */ |
| | | function getAssetTypeLabel(value) { |
| | | const type = asset_types.value.find(item => item.value === value); |
| | | return type ? type.label : value; |
| | | } |
| | | |
| | | /** 查询资产列表 */ |
| | | function getList() { |
| | | loading.value = true; |
| | | // 模拟API请求延迟 |
| | | setTimeout(() => { |
| | | let data = [...mockAssets]; |
| | | // 模拟搜索过滤 |
| | | if (queryParams.value.assetName) { |
| | | data = data.filter(item => item.assetName.includes(queryParams.value.assetName)); |
| | | const deleteRow = (id) => { |
| | | ElMessageBox.confirm("此操作将永久删除该文件, 是否继续?", "提示", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }).then(async () => { |
| | | const { code } = await delLedger(id); |
| | | if (code == 200) { |
| | | ElMessage({ |
| | | type: "success", |
| | | message: "删除成功", |
| | | }); |
| | | getTableData(); |
| | | } |
| | | if (queryParams.value.assetCode) { |
| | | data = data.filter(item => item.assetCode.includes(queryParams.value.assetCode)); |
| | | } |
| | | if (queryParams.value.contractorId) { |
| | | data = data.filter(item => item.contractorId === queryParams.value.contractorId); |
| | | } |
| | | if (queryParams.value.status) { |
| | | data = data.filter(item => item.status === queryParams.value.status); |
| | | } |
| | | // 模拟分页 |
| | | const start = (queryParams.value.pageNum - 1) * queryParams.value.pageSize; |
| | | const end = start + queryParams.value.pageSize; |
| | | assetList.value = data.slice(start, end); |
| | | total.value = data.length; |
| | | loading.value = false; |
| | | }, 500); |
| | | } |
| | | |
| | | /** 搜索按钮操作 */ |
| | | function handleQuery() { |
| | | queryParams.value.pageNum = 1; |
| | | getList(); |
| | | } |
| | | |
| | | /** 重置按钮操作 */ |
| | | function resetQuery() { |
| | | Object.assign(queryParams.value, { |
| | | assetName: undefined, |
| | | assetCode: undefined, |
| | | contractorId: undefined, |
| | | status: undefined, |
| | | }); |
| | | handleQuery(); |
| | | } |
| | | }; |
| | | |
| | | /** 删除按钮操作 */ |
| | | function handleDelete(row) { |
| | | const assetIds = row.assetId || ids.value; |
| | | ElMessage.confirm(`是否确认删除资产编号为"${assetIds}"的数据项?`).then(() => { |
| | | // 模拟删除操作 |
| | | ElMessage.success("删除成功"); |
| | | getList(); |
| | | }).catch(() => {}); |
| | | } |
| | | |
| | | /** 状态修改 */ |
| | | function handleStatusChange(row) { |
| | | let text = row.status === "0" ? "启用" : "停用"; |
| | | ElMessage.confirm(`确认要"${text}""${row.assetName}"资产吗?`).then(() => { |
| | | // 模拟状态修改 |
| | | ElMessage.success(text + "成功"); |
| | | getList(); |
| | | }).catch(() => { |
| | | row.status = row.status === "0" ? "1" : "0"; |
| | | }); |
| | | } |
| | | |
| | | /** 选择条数 */ |
| | | function handleSelectionChange(selection) { |
| | | ids.value = selection.map((item) => item.assetId); |
| | | single.value = selection.length != 1; |
| | | multiple.value = !selection.length; |
| | | } |
| | | |
| | | /** 重置操作表单 */ |
| | | function reset() { |
| | | form.value = { |
| | | assetId: undefined, |
| | | assetName: undefined, |
| | | assetCode: undefined, |
| | | contractorId: undefined, |
| | | contractorName: undefined, |
| | | assetType: undefined, |
| | | assetValue: 0, |
| | | status: "0", |
| | | remark: undefined, |
| | | }; |
| | | } |
| | | |
| | | /** 取消按钮 */ |
| | | function cancel() { |
| | | open.value = false; |
| | | reset(); |
| | | } |
| | | |
| | | /** 新增按钮操作 */ |
| | | function handleAdd() { |
| | | reset(); |
| | | open.value = true; |
| | | title.value = "添加资产"; |
| | | } |
| | | |
| | | /** 修改按钮操作 */ |
| | | function handleUpdate(row) { |
| | | reset(); |
| | | const assetId = row.assetId || ids.value; |
| | | // 模拟获取详情 |
| | | const asset = mockAssets.find(item => item.assetId === assetId); |
| | | if (asset) { |
| | | form.value = { ...asset }; |
| | | open.value = true; |
| | | title.value = "修改资产"; |
| | | const changeDaterange = (value) => { |
| | | if (value) { |
| | | filters.entryDateStart = dayjs(value[0]).format("YYYY-MM-DD"); |
| | | filters.entryDateEnd = dayjs(value[1]).format("YYYY-MM-DD"); |
| | | } else { |
| | | filters.entryDateStart = undefined; |
| | | filters.entryDateEnd = undefined; |
| | | } |
| | | } |
| | | getTableData(); |
| | | }; |
| | | |
| | | /** 提交按钮 */ |
| | | function submitForm() { |
| | | // 模拟表单验证 |
| | | const requiredFields = ['assetName', 'assetCode', 'contractorId', 'assetType', 'assetValue']; |
| | | const isInvalid = requiredFields.some(field => !form.value[field]); |
| | | const handleOut = () => { |
| | | ElMessageBox.confirm("选中的内容将被导出,是否确认导出?", "导出", { |
| | | confirmButtonText: "确认", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | proxy.download(`/device/ledger/export`, {}, "设备台账档案.xlsx"); |
| | | }) |
| | | .catch(() => { |
| | | proxy.$modal.msg("已取消"); |
| | | }); |
| | | }; |
| | | |
| | | if (isInvalid) { |
| | | ElMessage.error("请填写必填字段"); |
| | | return; |
| | | } |
| | | const showQRCode = async (row) => { |
| | | // 你可以自定义二维码内容,比如 row.id 或 row.deviceName |
| | | const qrContent = JSON.stringify(row); // 或 `${row.id}` |
| | | qrCodeUrl.value = await QRCode.toDataURL(qrContent); |
| | | qrRowData.value = row; |
| | | qrDialogVisible.value = true; |
| | | }; |
| | | |
| | | // 模拟提交操作 |
| | | ElMessage.success(title.value === "添加资产" ? "新增成功" : "修改成功"); |
| | | open.value = false; |
| | | getList(); |
| | | } |
| | | const downloadQRCode = () => { |
| | | const a = document.createElement("a"); |
| | | a.href = qrCodeUrl.value; |
| | | a.download = `${qrRowData.value.deviceName || "二维码"}.png`; |
| | | a.click(); |
| | | }; |
| | | |
| | | onMounted(() => { |
| | | getList(); |
| | | filters.entryDate = [ |
| | | dayjs().format("YYYY-MM-DD"), |
| | | dayjs().add(1, "day").format("YYYY-MM-DD"), |
| | | ] |
| | | filters.entryDateStart = dayjs().format("YYYY-MM-DD") |
| | | filters.entryDateEnd = dayjs().add(1, "day").format("YYYY-MM-DD") |
| | | getTableData(); |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .table_list { |
| | | margin-top: unset; |
| | | } |
| | | .actions { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | margin-bottom: 10px; |
| | | } |
| | | </style> |