| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754 |
- <template>
- <div class="app-container rel-maint-plan-page">
- <!-- 搜索表单 -->
- <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="90px" class="search-form">
- <el-form-item label="装置" prop="plant">
- <el-input v-model="queryParams.plant" placeholder="请输入装置" clearable size="small" @keyup.enter.native="handleQuery"/>
- </el-form-item>
- <el-form-item label="设备名称" prop="devName">
- <el-input v-model="queryParams.devName" placeholder="请输入设备名称" clearable size="small" @keyup.enter.native="handleQuery"/>
- </el-form-item>
- <el-form-item label="设备位号" prop="devTag">
- <el-input v-model="queryParams.devTag" placeholder="请输入设备位号" clearable size="small" @keyup.enter.native="handleQuery"/>
- </el-form-item>
- <el-form-item label="审批状态" prop="approvalStatus">
- <el-select v-model="queryParams.approvalStatus" placeholder="请选择" clearable size="small">
- <el-option label="未开始" value="9" />
- <el-option label="待审批" value="0" />
- <el-option label="已通过" value="1" />
- <el-option label="未通过" value="-1" />
- </el-select>
- </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"
- icon="el-icon-plus"
- size="mini"
- @click="handleAdd"
- v-hasPermi="['reliability:rel_maint_plan:add']"
- >新增</el-button>
- </el-col>
- <el-col :span="1.5">
- <el-button
- type="success"
- icon="el-icon-refresh"
- size="mini"
- :loading="generating"
- @click="handleGeneratePlans"
- v-hasPermi="['reliability:rel_maint_plan:add']"
- >自动生成计划</el-button>
- </el-col>
- <right-toolbar :showSearch.sync="showSearch" @queryTable="handleQuery"></right-toolbar>
- </el-row>
- <!-- Tab 布局:先显示进行中,再显示计划中、已完成、已拒绝 -->
- <el-tabs v-model="activeTab" type="border-card" @tab-click="handleTabClick">
- <!-- 进行中 Tab (completionStatus=0) -->
- <el-tab-pane name="incomplete">
- <span slot="label">
- <i class="el-icon-loading"></i> 进行中<span v-if="incompleteTotal > 0" class="tab-count">({{ incompleteTotal }})</span>
- </span>
- <div class="tab-content">
- <el-table v-loading="incompleteLoading" :data="incompleteList" :height="tableHeight" border size="small">
- <el-table-column label="装置" align="center" prop="plant" width="100" :show-overflow-tooltip="true"/>
- <el-table-column label="设备名称" align="center" prop="devName" width="140" :show-overflow-tooltip="true"/>
- <el-table-column label="设备位号" align="center" prop="devTag" width="120" :show-overflow-tooltip="true"/>
- <el-table-column label="计划开始时间" align="center" prop="planTime" width="110">
- <template slot-scope="scope">
- <span>{{ parseTime(scope.row.planTime, '{y}-{m}-{d}') }}</span>
- </template>
- </el-table-column>
- <el-table-column label="计划结束时间" align="center" prop="planEndTime" width="110">
- <template slot-scope="scope">
- <span>{{ parseTime(scope.row.planEndTime, '{y}-{m}-{d}') }}</span>
- </template>
- </el-table-column>
- <el-table-column label="审批状态" align="center" prop="approvalStatus" width="100">
- <template slot-scope="scope">
- <el-tag v-if="scope.row.approvalStatus === '0'" type="warning" size="mini">待审批</el-tag>
- <el-tag v-else-if="scope.row.approvalStatus === '1'" type="success" size="mini">已通过</el-tag>
- <el-tag v-else-if="scope.row.approvalStatus === '-1'" type="danger" size="mini">未通过</el-tag>
- <span v-else>{{ scope.row.approvalStatus }}</span>
- </template>
- </el-table-column>
- <el-table-column label="完成状态" align="center" prop="completionStatus" width="100">
- <template slot-scope="scope">
- <el-tag v-if="scope.row.completionStatus === '9'" type="info" size="mini">计划中</el-tag>
- <el-tag v-else-if="scope.row.completionStatus === '0'" type="warning" size="mini">未完成</el-tag>
- <el-tag v-else-if="scope.row.completionStatus === '1'" type="success" size="mini">已完成</el-tag>
- <el-tag v-else-if="scope.row.completionStatus === '-1'" type="danger" size="mini">已拒绝</el-tag>
- <span v-else>{{ scope.row.completionStatus }}</span>
- </template>
- </el-table-column>
- <el-table-column label="责任人" align="center" width="80">
- <template slot-scope="scope">
- <span>{{ getStaffNameById(scope.row.responsible) || '-' }}</span>
- </template>
- </el-table-column>
- <el-table-column label="审批人" align="center" width="80">
- <template slot-scope="scope">
- <span>{{ getStaffNameById(scope.row.approver) || '-' }}</span>
- </template>
- </el-table-column>
- <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true"/>
- <el-table-column label="操作" align="center" fixed="right" width="180">
- <template slot-scope="scope">
- <el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)">查看</el-button>
- <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)">修改</el-button>
- <el-button
- v-if="scope.row.approvalStatus === '-1'"
- size="mini"
- type="text"
- icon="el-icon-delete"
- @click="handleDelete(scope.row)"
- >删除</el-button>
- </template>
- </el-table-column>
- </el-table>
- <pagination
- v-show="incompleteTotal > 0"
- :total="incompleteTotal"
- :page.sync="incompletePage.pageNum"
- :limit.sync="incompletePage.pageSize"
- @pagination="getIncompleteList"
- :page-sizes="[10, 20, 50]"
- layout="total, sizes, prev, pager, next"
- />
- </div>
- </el-tab-pane>
- <!-- 计划中 Tab (completionStatus=9) -->
- <el-tab-pane name="planned">
- <span slot="label"><i class="el-icon-time"></i> 计划中</span>
- <div class="tab-content">
- <el-table v-loading="plannedLoading" :data="plannedList" :height="tableHeight" border size="small">
- <el-table-column label="装置" align="center" prop="plant" width="100" :show-overflow-tooltip="true"/>
- <el-table-column label="设备名称" align="center" prop="devName" width="140" :show-overflow-tooltip="true"/>
- <el-table-column label="设备位号" align="center" prop="devTag" width="120" :show-overflow-tooltip="true"/>
- <el-table-column label="计划开始时间" align="center" prop="planTime" width="110">
- <template slot-scope="scope">
- <span>{{ parseTime(scope.row.planTime, '{y}-{m}-{d}') }}</span>
- </template>
- </el-table-column>
- <el-table-column label="计划结束时间" align="center" prop="planEndTime" width="110">
- <template slot-scope="scope">
- <span>{{ parseTime(scope.row.planEndTime, '{y}-{m}-{d}') }}</span>
- </template>
- </el-table-column>
- <el-table-column label="审批状态" align="center" prop="approvalStatus" width="100">
- <template slot-scope="scope">
- <el-tag v-if="scope.row.approvalStatus === '9'" type="" size="mini">未开始</el-tag>
- <el-tag v-else-if="scope.row.approvalStatus === '0'" type="warning" size="mini">待审批</el-tag>
- <el-tag v-else-if="scope.row.approvalStatus === '1'" type="success" size="mini">已通过</el-tag>
- <el-tag v-else-if="scope.row.approvalStatus === '-1'" type="danger" size="mini">未通过</el-tag>
- <span v-else>{{ scope.row.approvalStatus }}</span>
- </template>
- </el-table-column>
- <el-table-column label="完成状态" align="center" prop="completionStatus" width="100">
- <template slot-scope="scope">
- <el-tag v-if="scope.row.completionStatus === '9'" type="info" size="mini">计划中</el-tag>
- <el-tag v-else-if="scope.row.completionStatus === '0'" type="warning" size="mini">未完成</el-tag>
- <el-tag v-else-if="scope.row.completionStatus === '1'" type="success" size="mini">已完成</el-tag>
- <el-tag v-else-if="scope.row.completionStatus === '-1'" type="danger" size="mini">已拒绝</el-tag>
- <span v-else>{{ scope.row.completionStatus }}</span>
- </template>
- </el-table-column>
- <el-table-column label="责任人" align="center" width="80">
- <template slot-scope="scope">
- <span>{{ getStaffNameById(scope.row.responsible) || '-' }}</span>
- </template>
- </el-table-column>
- <el-table-column label="审批人" align="center" width="80">
- <template slot-scope="scope">
- <span>{{ getStaffNameById(scope.row.approver) || '-' }}</span>
- </template>
- </el-table-column>
- <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true"/>
- <el-table-column label="操作" align="center" fixed="right" width="150">
- <template slot-scope="scope">
- <el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)">查看</el-button>
- <el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(scope.row)">修改</el-button>
- </template>
- </el-table-column>
- </el-table>
- <pagination
- v-show="plannedTotal > 0"
- :total="plannedTotal"
- :page.sync="plannedPage.pageNum"
- :limit.sync="plannedPage.pageSize"
- @pagination="getPlannedList"
- :page-sizes="[10, 20, 50]"
- layout="total, sizes, prev, pager, next"
- />
- </div>
- </el-tab-pane>
- <!-- 已完成 Tab (completionStatus=1) -->
- <el-tab-pane name="completed">
- <span slot="label"><i class="el-icon-circle-check"></i> 已完成</span>
- <div class="tab-content">
- <el-table v-loading="completedLoading" :data="completedList" :height="tableHeight" border size="small">
- <el-table-column label="装置" align="center" prop="plant" width="100" :show-overflow-tooltip="true"/>
- <el-table-column label="设备名称" align="center" prop="devName" width="140" :show-overflow-tooltip="true"/>
- <el-table-column label="设备位号" align="center" prop="devTag" width="120" :show-overflow-tooltip="true"/>
- <el-table-column label="计划开始时间" align="center" prop="planTime" width="110">
- <template slot-scope="scope">
- <span>{{ parseTime(scope.row.planTime, '{y}-{m}-{d}') }}</span>
- </template>
- </el-table-column>
- <el-table-column label="计划结束时间" align="center" prop="planEndTime" width="110">
- <template slot-scope="scope">
- <span>{{ parseTime(scope.row.planEndTime, '{y}-{m}-{d}') }}</span>
- </template>
- </el-table-column>
- <el-table-column label="审批状态" align="center" prop="approvalStatus" width="100">
- <template slot-scope="scope">
- <el-tag v-if="scope.row.approvalStatus === '1'" type="success" size="mini">已通过</el-tag>
- <span v-else>{{ scope.row.approvalStatus }}</span>
- </template>
- </el-table-column>
- <el-table-column label="完成状态" align="center" prop="completionStatus" width="100">
- <template slot-scope="scope">
- <el-tag v-if="scope.row.completionStatus === '9'" type="info" size="mini">计划中</el-tag>
- <el-tag v-else-if="scope.row.completionStatus === '0'" type="warning" size="mini">未完成</el-tag>
- <el-tag v-else-if="scope.row.completionStatus === '1'" type="success" size="mini">已完成</el-tag>
- <el-tag v-else-if="scope.row.completionStatus === '-1'" type="danger" size="mini">已拒绝</el-tag>
- <span v-else>{{ scope.row.completionStatus }}</span>
- </template>
- </el-table-column>
- <el-table-column label="责任人" align="center" width="80">
- <template slot-scope="scope">
- <span>{{ getStaffNameById(scope.row.responsible) || '-' }}</span>
- </template>
- </el-table-column>
- <el-table-column label="审批人" align="center" width="80">
- <template slot-scope="scope">
- <span>{{ getStaffNameById(scope.row.approver) || '-' }}</span>
- </template>
- </el-table-column>
- <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true"/>
- <el-table-column label="操作" align="center" fixed="right" width="80">
- <template slot-scope="scope">
- <el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)">查看</el-button>
- </template>
- </el-table-column>
- </el-table>
- <pagination
- v-show="completedTotal > 0"
- :total="completedTotal"
- :page.sync="completedPage.pageNum"
- :limit.sync="completedPage.pageSize"
- @pagination="getCompletedList"
- :page-sizes="[10, 20, 50]"
- layout="total, sizes, prev, pager, next"
- />
- </div>
- </el-tab-pane>
- <!-- 已拒绝 Tab (completionStatus=-1) -->
- <el-tab-pane name="rejected">
- <span slot="label"><i class="el-icon-close"></i> 已拒绝</span>
- <div class="tab-content">
- <el-table v-loading="rejectedLoading" :data="rejectedList" :height="tableHeight" border size="small">
- <el-table-column label="装置" align="center" prop="plant" width="100" :show-overflow-tooltip="true"/>
- <el-table-column label="设备名称" align="center" prop="devName" width="140" :show-overflow-tooltip="true"/>
- <el-table-column label="设备位号" align="center" prop="devTag" width="120" :show-overflow-tooltip="true"/>
- <el-table-column label="计划开始时间" align="center" prop="planTime" width="110">
- <template slot-scope="scope">
- <span>{{ parseTime(scope.row.planTime, '{y}-{m}-{d}') }}</span>
- </template>
- </el-table-column>
- <el-table-column label="计划结束时间" align="center" prop="planEndTime" width="110">
- <template slot-scope="scope">
- <span>{{ parseTime(scope.row.planEndTime, '{y}-{m}-{d}') }}</span>
- </template>
- </el-table-column>
- <el-table-column label="审批状态" align="center" prop="approvalStatus" width="100">
- <template slot-scope="scope">
- <el-tag v-if="scope.row.approvalStatus === '-1'" type="danger" size="mini">未通过</el-tag>
- <span v-else>{{ scope.row.approvalStatus }}</span>
- </template>
- </el-table-column>
- <el-table-column label="完成状态" align="center" prop="completionStatus" width="100">
- <template slot-scope="scope">
- <el-tag v-if="scope.row.completionStatus === '9'" type="info" size="mini">计划中</el-tag>
- <el-tag v-else-if="scope.row.completionStatus === '0'" type="warning" size="mini">未完成</el-tag>
- <el-tag v-else-if="scope.row.completionStatus === '1'" type="success" size="mini">已完成</el-tag>
- <el-tag v-else-if="scope.row.completionStatus === '-1'" type="danger" size="mini">已拒绝</el-tag>
- <span v-else>{{ scope.row.completionStatus }}</span>
- </template>
- </el-table-column>
- <el-table-column label="责任人" align="center" width="80">
- <template slot-scope="scope">
- <span>{{ getStaffNameById(scope.row.responsible) || '-' }}</span>
- </template>
- </el-table-column>
- <el-table-column label="审批人" align="center" width="80">
- <template slot-scope="scope">
- <span>{{ getStaffNameById(scope.row.approver) || '-' }}</span>
- </template>
- </el-table-column>
- <el-table-column label="备注" align="center" prop="remarks" :show-overflow-tooltip="true"/>
- <el-table-column label="操作" align="center" fixed="right" width="80">
- <template slot-scope="scope">
- <el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row)">查看</el-button>
- </template>
- </el-table-column>
- </el-table>
- <pagination
- v-show="rejectedTotal > 0"
- :total="rejectedTotal"
- :page.sync="rejectedPage.pageNum"
- :limit.sync="rejectedPage.pageSize"
- @pagination="getRejectedList"
- :page-sizes="[10, 20, 50]"
- layout="total, sizes, prev, pager, next"
- />
- </div>
- </el-tab-pane>
- </el-tabs>
- <!-- 添加或修改设备维修计划对话框 -->
- <maint-plan-form
- :visible.sync="open"
- :title="title"
- :form="form"
- @submit="handleFormSubmit"
- @cancel="cancel"
- />
- <!-- 查看维修计划详情对话框 -->
- <maint-plan-detail
- :visible.sync="detailOpen"
- :plan-id="viewPlanId"
- @close="handleDetailClose"
- />
- <!-- 用户导入对话框 -->
- </div>
- </template>
- <script>
- import { listRel_maint_plan, getRel_maint_plan, delRel_maint_plan, updateRel_maint_plan, submitApprove, resubmitApprove, generateMaintPlans } from "@/api/reliability/rel_maint_plan";
- import { listStaffmgrAll } from "@/api/plant/staffmgr";
- import Treeselect from "@riophae/vue-treeselect";
- import "@riophae/vue-treeselect/dist/vue-treeselect.css";
- import MaintPlanForm from "./MaintPlanForm.vue";
- import MaintPlanDetail from "./MaintPlanDetail.vue";
- export default {
- name: "Rel_maint_plan",
- components: { Treeselect, MaintPlanForm, MaintPlanDetail },
- data() {
- return {
- // 当前激活的Tab(默认显示进行中)
- activeTab: 'incomplete',
- // 表格高度
- tableHeight: 400,
- // 生成计划中
- generating: false,
- // 显示搜索条件
- showSearch: false,
- // 搜索参数
- queryParams: {
- plant: null,
- devName: null,
- devTag: null,
- approvalStatus: null
- },
- // 计划中数据
- plannedList: [],
- plannedTotal: 0,
- plannedLoading: false,
- plannedPage: { pageNum: 1, pageSize: 20 },
- // 进行中数据
- incompleteList: [],
- incompleteTotal: 0,
- incompleteLoading: false,
- incompletePage: { pageNum: 1, pageSize: 20 },
- // 已完成数据
- completedList: [],
- completedTotal: 0,
- completedLoading: false,
- completedPage: { pageNum: 1, pageSize: 20 },
- // 已拒绝数据
- rejectedList: [],
- rejectedTotal: 0,
- rejectedLoading: false,
- rejectedPage: { pageNum: 1, pageSize: 20 },
- // 弹出层标题
- title: "",
- // 是否显示弹出层
- open: false,
- // 是否显示详情弹出层
- detailOpen: false,
- // 查看的计划ID
- viewPlanId: null,
- // 表单参数
- form: {},
- // 所有人员选项
- staffOptions: []
- };
- },
- created() {
- // 设置表格高度
- this.$nextTick(() => {
- this.tableHeight = document.body.clientHeight - 220;
- });
- this.getStaffList();
- // 加载所有Tab的数据
- this.refreshAllTabs();
- },
- watch: {
- showSearch() {
- // 搜索栏显示/隐藏时调整表格高度
- this.$nextTick(() => {
- this.tableHeight = document.body.clientHeight - (this.showSearch ? 280 : 220);
- });
- }
- },
- methods: {
- /** 查询人员列表 */
- getStaffList() {
- listStaffmgrAll().then(response => {
- this.staffOptions = response.rows || response.data || [];
- }).catch(error => {
- console.error('加载人员数据失败:', error);
- });
- },
- /** 根据员工号获取员工姓名 */
- getStaffNameById(staffid) {
- if (!staffid) return '';
- const staff = this.staffOptions.find(s => s.staffid === staffid);
- return staff ? staff.name : staffid;
- },
- /** 刷新所有Tab数据 */
- refreshAllTabs() {
- this.getPlannedList();
- this.getIncompleteList();
- this.getCompletedList();
- this.getRejectedList();
- },
- /** 获取当前Tab列表 */
- getCurrentTabList() {
- if (this.activeTab === 'planned') {
- this.getPlannedList();
- } else if (this.activeTab === 'incomplete') {
- this.getIncompleteList();
- } else if (this.activeTab === 'completed') {
- this.getCompletedList();
- } else if (this.activeTab === 'rejected') {
- this.getRejectedList();
- }
- },
- /** 搜索按钮操作 */
- handleQuery() {
- // 重置分页
- this.plannedPage.pageNum = 1;
- this.incompletePage.pageNum = 1;
- this.completedPage.pageNum = 1;
- this.refreshAllTabs();
- },
- /** 重置按钮操作 */
- resetQuery() {
- this.resetForm("queryForm");
- this.queryParams = {
- plant: null,
- devName: null,
- devTag: null,
- approvalStatus: null
- };
- this.handleQuery();
- },
- /** 获取计划中列表 (completionStatus=9) */
- getPlannedList() {
- this.plannedLoading = true;
- listRel_maint_plan({
- ...this.queryParams,
- completionStatus: '9',
- pageNum: this.plannedPage.pageNum,
- pageSize: this.plannedPage.pageSize,
- orderByColumn: 'planTime',
- isAsc: 'asc'
- }).then(response => {
- this.plannedList = response.rows;
- this.plannedTotal = response.total;
- }).finally(() => {
- this.plannedLoading = false;
- });
- },
- /** 获取进行中列表 (completionStatus=0) */
- getIncompleteList() {
- this.incompleteLoading = true;
- listRel_maint_plan({
- ...this.queryParams,
- completionStatus: '0',
- pageNum: this.incompletePage.pageNum,
- pageSize: this.incompletePage.pageSize,
- orderByColumn: 'planTime',
- isAsc: 'desc'
- }).then(response => {
- this.incompleteList = response.rows;
- this.incompleteTotal = response.total;
- }).finally(() => {
- this.incompleteLoading = false;
- });
- },
- /** 获取已完成列表 (completionStatus=1) */
- getCompletedList() {
- this.completedLoading = true;
- listRel_maint_plan({
- ...this.queryParams,
- completionStatus: '1',
- pageNum: this.completedPage.pageNum,
- pageSize: this.completedPage.pageSize,
- orderByColumn: 'planTime',
- isAsc: 'desc'
- }).then(response => {
- this.completedList = response.rows;
- this.completedTotal = response.total;
- }).finally(() => {
- this.completedLoading = false;
- });
- },
- /** 获取已拒绝列表 (completionStatus=-1) */
- getRejectedList() {
- this.rejectedLoading = true;
- listRel_maint_plan({
- ...this.queryParams,
- completionStatus: '-1',
- pageNum: this.rejectedPage.pageNum,
- pageSize: this.rejectedPage.pageSize,
- orderByColumn: 'planTime',
- isAsc: 'desc'
- }).then(response => {
- this.rejectedList = response.rows;
- this.rejectedTotal = response.total;
- }).finally(() => {
- this.rejectedLoading = false;
- });
- },
- /** Tab切换事件 */
- handleTabClick(tab) {
- // 切换时刷新对应Tab的数据
- if (tab.name === 'planned') {
- this.getPlannedList();
- } else if (tab.name === 'incomplete') {
- this.getIncompleteList();
- } else if (tab.name === 'completed') {
- this.getCompletedList();
- } else if (tab.name === 'rejected') {
- this.getRejectedList();
- }
- },
- // 取消按钮
- cancel() {
- this.open = false;
- this.reset();
- },
- // 表单重置
- reset() {
- this.form = {
- planId: null,
- devId: null,
- plant: null,
- devName: null,
- devTag: null,
- planTime: null,
- approvalStatus: "0",
- responsible: null,
- completionStatus: "0",
- processId: null,
- approver: null,
- delFlag: null,
- createrCode: null,
- createdate: null,
- updaterCode: null,
- updatedate: null,
- deptId: null,
- remarks: null,
- maintComponents: []
- };
- this.resetForm("form");
- },
- /** 新增按钮操作 */
- handleAdd() {
- this.$router.push({ path: '/reliability/rel_maint_plan/form' });
- },
- /** 查看按钮操作 */
- handleView(row) {
- this.viewPlanId = row.planId;
- this.detailOpen = true;
- },
- /** 关闭详情弹窗 */
- handleDetailClose() {
- this.detailOpen = false;
- this.viewPlanId = null;
- },
- /** 修改按钮操作 */
- handleUpdate(row) {
- const planId = row.planId || this.ids;
- this.$router.push({ path: '/reliability/rel_maint_plan/form', query: { planId: planId } });
- },
- /** 处理表单提交 */
- handleFormSubmit(formData) {
- // 判断是否为计划中状态
- const isPlannedStatus = formData.approvalStatus == '9' || formData.completionStatus == '9';
- if (formData.planId != null) {
- // 修改模式
- if (formData.approvalStatus == "1") {
- // 已通过的计划 - 再次提交申请
- resubmitApprove(formData).then(response => {
- this.msgSuccess("维修计划再次提交申请成功");
- this.open = false;
- this.refreshAllTabs();
- }).catch(error => {
- this.msgError("再次提交失败:" + (error.message || "未知错误"));
- });
- } else if (isPlannedStatus) {
- // 计划中状态 - 提交审批(和新增一样)
- submitApprove(formData).then(response => {
- this.msgSuccess("维修计划申请提交成功");
- this.open = false;
- this.refreshAllTabs();
- }).catch(error => {
- this.msgError("提交失败:" + (error.message || "未知错误"));
- });
- } else {
- // 其他状态 - 直接修改
- updateRel_maint_plan(formData).then(response => {
- this.msgSuccess("修改成功");
- this.open = false;
- this.refreshAllTabs();
- });
- }
- } else {
- // 新增模式 - 提交申请
- submitApprove(formData).then(response => {
- this.msgSuccess("维修计划申请提交成功");
- this.open = false;
- this.refreshAllTabs();
- }).catch(error => {
- this.msgError("提交失败:" + (error.message || "未知错误"));
- });
- }
- },
- /** 删除按钮操作 */
- handleDelete(row) {
- const planIds = row.planId;
- this.$confirm('是否确认删除?', "警告", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning"
- }).then(() => {
- return delRel_maint_plan(planIds);
- }).then(() => {
- this.refreshAllTabs();
- this.msgSuccess("删除成功");
- });
- },
- /** 自动生成维修计划 */
- handleGeneratePlans() {
- this.$confirm('确认自动生成所有设备未来6个月的维修计划吗?', '提示', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning'
- }).then(() => {
- this.generating = true;
- generateMaintPlans(6, 30).then(response => {
- this.$message.success(response.msg || '生成成功');
- this.refreshAllTabs();
- }).catch(error => {
- this.$message.error('生成失败:' + (error.msg || error.message || '未知错误'));
- }).finally(() => {
- this.generating = false;
- });
- }).catch(() => {});
- }
- }
- };
- </script>
- <style scoped lang="scss">
- .rel-maint-plan-page {
- .search-form {
- padding: 5px 0;
- background-color: #fff;
- margin-bottom: 5px;
- }
- .mb8 {
- margin-bottom: 5px;
- }
- ::v-deep .el-tabs--border-card {
- border-radius: 4px;
- box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.08);
- }
- ::v-deep .el-tabs__header {
- background-color: #f5f7fa;
- margin: 0;
- }
- ::v-deep .el-tabs__content {
- padding: 8px;
- }
- ::v-deep .el-tabs__item {
- padding: 0 20px;
- height: 38px;
- line-height: 38px;
- font-size: 13px;
- &.is-active {
- font-weight: bold;
- }
- i {
- margin-right: 4px;
- }
- }
- .tab-count {
- color: #e6a23c;
- font-weight: bold;
- }
- .tab-content {
- padding: 0;
- }
- ::v-deep .el-table {
- font-size: 12px;
- th {
- background-color: #f5f7fa;
- font-weight: 600;
- padding: 6px 0;
- }
- td {
- padding: 4px 0;
- }
- }
- ::v-deep .pagination-container {
- margin-top: 5px;
- padding: 5px 0;
- }
- }
- </style>
|