Merge remote-tracking branch 'refs/remotes/origin/dev_erjitaocan' into dev
# Conflicts:
# src/views/collaborativeApproval/noticeManagement/index.vue
| | |
| | | # 页面标题
|
| | | VITE_APP_TITLE = 芯导云(管理信息系统)
|
| | | VITE_APP_TITLE = 基智油井管理系统
|
| | |
|
| | | # 开发环境配置
|
| | | VITE_APP_ENV = 'development'
|
| | |
|
| | | # 芯导云(管理信息系统)/开发环境
|
| | | # 基智油井管理系统/开发环境
|
| | | VITE_APP_BASE_API = '/dev-api'
|
| | |
| | | # 页面标题
|
| | | VITE_APP_TITLE = 芯导云(管理信息系统)
|
| | | VITE_APP_TITLE = 基智油井管理系统
|
| | |
|
| | | # 生产环境配置
|
| | | VITE_APP_ENV = 'production'
|
| | |
|
| | | # 芯导云(管理信息系统)/生产环境
|
| | | # 基智油井管理系统/生产环境
|
| | | VITE_APP_BASE_API = '/prod-api'
|
| | |
|
| | | # 是否在打包时开启压缩,支持 gzip 和 brotli
|
| | |
| | | # 页面标题
|
| | | VITE_APP_TITLE = 芯导云(管理信息系统)
|
| | | VITE_APP_TITLE = 基智油井管理系统
|
| | |
|
| | | # 生产环境配置
|
| | | VITE_APP_ENV = 'staging'
|
| | |
|
| | | # 芯导云(管理信息系统)/生产环境
|
| | | # 基智油井管理系统/生产环境
|
| | | VITE_APP_BASE_API = '/stage-api'
|
| | |
|
| | | # 是否在打包时开启压缩,支持 gzip 和 brotli
|
| | |
| | | <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
| | | <meta name="renderer" content="webkit">
|
| | | <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
| | | <link rel="icon" href="/favicon.ico">
|
| | | <title>芯导云(管理信息系统)</title>
|
| | | <link rel="icon" href="/JZYJico.ico">
|
| | | <title>基智油井管理系统</title>
|
| | | <!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]-->
|
| | | <style>
|
| | | html,
|
| | |
| | | { |
| | | "name": "ruoyi", |
| | | "version": "3.8.9", |
| | | "description": "芯导云(管理信息系统)", |
| | | "description": "基智油井管理系统", |
| | | "author": "若依", |
| | | "license": "MIT", |
| | | "type": "module", |
| | |
| | | <script setup>
|
| | | import { ref, computed, onMounted, watch } from 'vue'
|
| | | import useUserStore from '@/store/modules/user'
|
| | | import defaultLogo from '@/assets/logo/logo.png' // 导入默认logo
|
| | | import defaultLogo from '@/assets/indexViews/JZYJLogo.png' // 导入默认logo
|
| | |
|
| | | defineProps({
|
| | | collapse: {
|
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="30" v-for="(contact, index) in formYYs.contactList" :key="index"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="联系人:" prop="contactPerson"> |
| | | <el-input v-model="contact.contactPerson" placeholder="请输入" clearable /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="联系电话:" prop="contactPhone"> |
| | | <div style="display: flex; align-items: center;width: 100%;"> |
| | | <el-input v-model="contact.contactPhone" placeholder="请输入" clearable /> |
| | | <el-button @click="removeContact(index)" type="danger" circle style="margin-left: 5px;"> |
| | | <el-icon><Close /></el-icon> |
| | | </el-button> |
| | | </div> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-button @click="addNewContact" style="margin-bottom: 10px;">+ 新增联系人</el-button> |
| | | |
| | | <el-row :gutter="30"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="银行基本户:" prop="basicBankAccount"> |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="30" v-for="(contact, index) in formYYs.contactList" :key="index"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="联系人:" prop="contactPerson"> |
| | | <el-input v-model="contact.contactPerson" placeholder="请输入" clearable /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="联系电话:" prop="contactPhone"> |
| | | <div style="display: flex; align-items: center;width: 100%;"> |
| | | <el-input v-model="contact.contactPhone" placeholder="请输入" clearable /> |
| | | <el-button @click="removeContact(index)" type="danger" circle style="margin-left: 5px;"> |
| | | <el-icon><Close /></el-icon> |
| | | </el-button> |
| | | </div> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-button @click="addNewContact" style="margin-bottom: 10px;">+ 新增联系人</el-button> |
| | | <el-row :gutter="30"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="维护人:" prop="maintainer"> |
| | |
| | | |
| | | // 模拟数据 |
| | | const holidayData = ref([ |
| | | { id: '1', name: '春节', type: 'legal', startDate: '2024-02-10', endDate: '2024-02-17', days: 8, status: 'active' }, |
| | | { id: '2', name: '清明节', type: 'legal', startDate: '2024-04-05', endDate: '2024-04-05', days: 1, status: 'active' }, |
| | | { id: '3', name: '劳动节', type: 'legal', startDate: '2024-05-01', endDate: '2024-05-05', days: 5, status: 'active' } |
| | | { id: '1', name: '春节', type: 'legal', startDate: '2025-02-10', endDate: '2025-02-17', days: 8, status: 'active' }, |
| | | { id: '2', name: '清明节', type: 'legal', startDate: '2025-04-05', endDate: '2025-04-05', days: 1, status: 'active' }, |
| | | { id: '3', name: '劳动节', type: 'legal', startDate: '2025-05-01', endDate: '2025-05-05', days: 5, status: 'active' } |
| | | ]) |
| | | |
| | | const annualData = ref([ |
| | |
| | | keyPoints: "绿色通道条件,简化流程,审批权限,时间控制", |
| | | creator: "张经理", |
| | | usageCount: 15, |
| | | createTime: "2024-01-15 10:30:00" |
| | | createTime: "2025-01-15 10:30:00" |
| | | }, |
| | | { |
| | | id: "2", |
| | |
| | | keyPoints: "项目协调,定期会议,统一意见,负责人制度", |
| | | creator: "李主管", |
| | | usageCount: 8, |
| | | createTime: "2024-01-14 15:20:00" |
| | | createTime: "2025-01-14 15:20:00" |
| | | }, |
| | | { |
| | | id: "3", |
| | |
| | | keyPoints: "紧急分级,标准制定,流程简化,及时处理", |
| | | creator: "王专员", |
| | | usageCount: 12, |
| | | createTime: "2024-01-13 09:15:00" |
| | | createTime: "2025-01-13 09:15:00" |
| | | } |
| | | ]; |
| | | |
| | |
| | | id: 1, |
| | | title: '产品开发周会', |
| | | status: 'ongoing', |
| | | startTime: '2024-01-15 09:00:00', |
| | | endTime: '2024-01-15 10:30:00', |
| | | startTime: '2025-01-15 09:00:00', |
| | | endTime: '2025-01-15 10:30:00', |
| | | location: '会议室A', |
| | | host: '张经理', |
| | | participants: ['张经理', '李工程师', '王设计师', '赵测试员'], |
| | |
| | | id: 2, |
| | | title: '客户需求评审会', |
| | | status: 'upcoming', |
| | | startTime: '2024-01-15 14:00:00', |
| | | endTime: '2024-01-15 15:00:00', |
| | | startTime: '2025-01-15 14:00:00', |
| | | endTime: '2025-01-15 15:00:00', |
| | | location: '线上会议', |
| | | host: '陈总监', |
| | | participants: ['陈总监', '刘产品经理', '孙客户经理', '客户代表'], |
| | |
| | | id: 3, |
| | | title: '团队建设活动', |
| | | status: 'completed', |
| | | startTime: '2024-01-14 16:00:00', |
| | | endTime: '2024-01-14 18:00:00', |
| | | startTime: '2025-01-14 16:00:00', |
| | | endTime: '2025-01-14 18:00:00', |
| | | location: '公司大厅', |
| | | host: '人事部', |
| | | participants: ['全体员工'], |
| | |
| | | <div class="app-container"> |
| | | <!-- 搜索表单 --> |
| | | <div class="search_form"> |
| | | <!-- <div>--> |
| | | <!-- <span class="search_title">公告标题:</span>--> |
| | | <!-- <el-input--> |
| | | <!-- v-model="searchForm.title"--> |
| | | <!-- style="width: 240px"--> |
| | | <!-- placeholder="请输入公告标题搜索"--> |
| | | <!-- @change="handleQuery"--> |
| | | <!-- clearable--> |
| | | <!-- :prefix-icon="Search"--> |
| | | <!-- />--> |
| | | <!-- <span class="search_title ml10">公告类型:</span>--> |
| | | <!-- <el-select v-model="searchForm.type" clearable @change="handleQuery" style="width: 240px">--> |
| | | <!-- <el-option label="放假通知" :value="1"/>--> |
| | | <!-- <el-option label="设备维修通知" :value="2"/>--> |
| | | <!-- </el-select>--> |
| | | <!-- <span class="search_title ml10">状态:</span>--> |
| | | <!-- <el-select v-model="searchForm.status" clearable @change="handleQuery" style="width: 240px">--> |
| | | <!-- <el-option label="草稿" :value="0"/>--> |
| | | <!-- <el-option label="已发布" :value="1"/>--> |
| | | <!-- <el-option label="已下线" :value="2"/>--> |
| | | <!-- </el-select>--> |
| | | <!-- <el-button type="primary" @click="handleQuery" style="margin-left: 10px">搜索</el-button>--> |
| | | <!-- <el-button @click="resetQuery" style="margin-left: 10px">重置</el-button>--> |
| | | <!-- </div>--> |
| | | <div> |
| | | <span class="search_title">公告标题:</span> |
| | | <el-input |
| | | v-model="searchForm.noticeTitle" |
| | | style="width: 240px" |
| | | placeholder="请输入公告标题搜索" |
| | | @change="handleQuery" |
| | | clearable |
| | | :prefix-icon="Search" |
| | | /> |
| | | <span class="search_title ml10">公告类型:</span> |
| | | <el-select v-model="searchForm.noticeType" clearable @change="handleQuery" style="width: 240px"> |
| | | <el-option label="放假通知" value="1" /> |
| | | <el-option label="设备维修通知" value="2" /> |
| | | </el-select> |
| | | <span class="search_title ml10">状态:</span> |
| | | <el-select v-model="searchForm.status" clearable @change="handleQuery" style="width: 240px"> |
| | | <el-option label="草稿" value="0" /> |
| | | <el-option label="已发布" value="1" /> |
| | | <el-option label="已下线" value="2" /> |
| | | </el-select> |
| | | <el-button type="primary" @click="handleQuery" style="margin-left: 10px">搜索</el-button> |
| | | <el-button @click="resetQuery" style="margin-left: 10px">重置</el-button> |
| | | </div> |
| | | <div> |
| | | <el-button type="primary" @click="openForm('add')">新增公告</el-button> |
| | | <el-button type="danger" plain @click="handleDelete" :disabled="!selectedIds.length">删除</el-button> |
| | |
| | | <!-- 通知公告板 --> |
| | | <div class="notice-board"> |
| | | <!-- 放假通知区域 --> |
| | | <div class="notice-section" v-if="holidayNoticeCount > 0"> |
| | | <div class="notice-section" v-if="holidayNotices.length > 0"> |
| | | <div class="section-header"> |
| | | <h3>📅 放假通知</h3> |
| | | <span class="section-count">{{ holidayNoticeCount }}条</span> |
| | | <span class="section-count">{{ holidayNotices.length }}条</span> |
| | | </div> |
| | | <div class="notice-cards"> |
| | | <div |
| | | v-for="notice in holidayNotices" |
| | | :key="notice.id" |
| | | class="notice-card holiday-card" |
| | | :class="{ 'urgent': notice.priority === '3' }" |
| | | <div |
| | | v-for="notice in holidayNotices" |
| | | :key="notice.id" |
| | | class="notice-card holiday-card" |
| | | :class="{ 'urgent': notice.priority === '3' }" |
| | | > |
| | | <div class="card-header"> |
| | | <div class="card-title"> |
| | | <el-icon class="holiday-icon"> |
| | | <Calendar/> |
| | | </el-icon> |
| | | {{ notice.title }} |
| | | <el-icon class="holiday-icon"><Calendar /></el-icon> |
| | | {{ notice.noticeTitle }} |
| | | </div> |
| | | <div class="card-actions"> |
| | | <el-button link type="primary" @click="handleEdit(notice)">编辑</el-button> |
| | |
| | | </div> |
| | | </div> |
| | | <div class="card-content"> |
| | | <p>{{ notice.content }}</p> |
| | | <p>{{ notice.noticeContent }}</p> |
| | | </div> |
| | | <div class="card-footer"> |
| | | <div class="card-meta"> |
| | |
| | | </span> |
| | | </div> |
| | | <div class="card-info"> |
| | | <span class="creator">{{ notice.createUserName }}</span> |
| | | <span class="creator">{{ notice.createBy }}</span> |
| | | <span class="time">{{ notice.createTime }}</span> |
| | | </div> |
| | | </div> |
| | | <div class="card-remark" v-if="notice.remark"> |
| | | <el-icon> |
| | | <InfoFilled/> |
| | | </el-icon> |
| | | <el-icon><InfoFilled /></el-icon> |
| | | <span>{{ notice.remark }}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <pagination |
| | | v-if="holidayNoticePage.total > 0" |
| | | :total="holidayNoticePage.total" |
| | | :page="holidayNoticePage.current" |
| | | :limit="holidayNoticePage.size" |
| | | @pagination="handleHolidayNoticeCurrentChange" |
| | | /> |
| | | |
| | | <!-- 设备维修通知区域 --> |
| | | <div class="notice-section" v-if="maintenanceNoticeCount > 0"> |
| | | <div class="notice-section" v-if="maintenanceNotices.length > 0"> |
| | | <div class="section-header"> |
| | | <h3>🔧 设备维修通知</h3> |
| | | <span class="section-count">{{ maintenanceNoticeCount }}条</span> |
| | | <span class="section-count">{{ maintenanceNotices.length }}条</span> |
| | | </div> |
| | | <div class="notice-cards"> |
| | | <div |
| | | v-for="notice in maintenanceNotices" |
| | | :key="notice.id" |
| | | class="notice-card maintenance-card" |
| | | :class="{ 'urgent': notice.priority === '3' }" |
| | | <div |
| | | v-for="notice in maintenanceNotices" |
| | | :key="notice.id" |
| | | class="notice-card maintenance-card" |
| | | :class="{ 'urgent': notice.priority === '3' }" |
| | | > |
| | | <div class="card-header"> |
| | | <div class="card-title"> |
| | | <el-icon class="maintenance-icon"> |
| | | <Tools/> |
| | | </el-icon> |
| | | {{ notice.title }} |
| | | <el-icon class="maintenance-icon"><Tools /></el-icon> |
| | | {{ notice.noticeTitle }} |
| | | </div> |
| | | <div class="card-actions"> |
| | | <el-button link type="primary" @click="handleEdit(notice)">编辑</el-button> |
| | |
| | | </div> |
| | | </div> |
| | | <div class="card-content"> |
| | | <p>{{ notice.content }}</p> |
| | | <p>{{ notice.noticeContent }}</p> |
| | | </div> |
| | | <div class="card-footer"> |
| | | <div class="card-meta"> |
| | |
| | | </span> |
| | | </div> |
| | | <div class="card-info"> |
| | | <span class="creator">{{ notice.createUserName }}</span> |
| | | <span class="creator">{{ notice.createBy }}</span> |
| | | <span class="time">{{ notice.createTime }}</span> |
| | | </div> |
| | | </div> |
| | | <div class="card-remark" v-if="notice.remark"> |
| | | <el-icon> |
| | | <InfoFilled/> |
| | | </el-icon> |
| | | <el-icon><InfoFilled /></el-icon> |
| | | <span>{{ notice.remark }}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | <pagination |
| | | v-if="maintenanceNoticePage.total > 0" |
| | | :total="maintenanceNoticePage.total" |
| | | :page="maintenanceNoticePage.current" |
| | | :limit="maintenanceNoticePage.size" |
| | | @pagination="handleMaintenanceNoticeCurrentChange" |
| | | /> |
| | | |
| | | <!-- 空状态 --> |
| | | <div class="empty-state" v-if="holidayNotices.length === 0 && maintenanceNotices.length === 0"> |
| | | <el-empty description="暂无通知公告"/> |
| | | <div class="empty-state" v-if="filteredNotices.length === 0"> |
| | | <el-empty description="暂无通知公告" /> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- 新增/编辑对话框 --> |
| | | <el-dialog |
| | | :title="dialogTitle" |
| | | v-model="dialogVisible" |
| | | width="800px" |
| | | append-to-body |
| | | @close="resetForm" |
| | | <el-dialog |
| | | :title="dialogTitle" |
| | | v-model="dialogVisible" |
| | | width="800px" |
| | | append-to-body |
| | | @close="resetForm" |
| | | > |
| | | <el-form ref="formRef" :model="form" :rules="rules" label-width="100px"> |
| | | <el-row> |
| | | <el-col :span="12"> |
| | | <el-form-item label="公告标题" prop="title"> |
| | | <el-input v-model="form.title" placeholder="请输入公告标题"/> |
| | | <el-form-item label="公告标题" prop="noticeTitle"> |
| | | <el-input v-model="form.noticeTitle" placeholder="请输入公告标题" /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="公告类型" prop="type"> |
| | | <el-select v-model="form.type" placeholder="请选择公告类型" style="width: 100%"> |
| | | <el-option label="放假通知" :value="1"/> |
| | | <el-option label="设备维修通知" :value="2"/> |
| | | <el-form-item label="公告类型" prop="noticeType"> |
| | | <el-select v-model="form.noticeType" placeholder="请选择公告类型" style="width: 100%"> |
| | | <el-option label="放假通知" value="1" /> |
| | | <el-option label="设备维修通知" value="2" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | <el-col :span="12"> |
| | | <el-form-item label="状态"> |
| | | <el-radio-group v-model="form.status"> |
| | | <el-radio :value="0">草稿</el-radio> |
| | | <el-radio :value="1">已发布</el-radio> |
| | | <el-radio :value="2">已下线</el-radio> |
| | | <el-radio value="0">草稿</el-radio> |
| | | <el-radio value="1">已发布</el-radio> |
| | | <el-radio value="2">已下线</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="优先级"> |
| | | <el-select v-model="form.priority" placeholder="请选择优先级" style="width: 100%"> |
| | | <el-option label="普通" :value="1"/> |
| | | <el-option label="重要" :value="2"/> |
| | | <el-option label="紧急" :value="3"/> |
| | | <el-option label="普通" value="1" /> |
| | | <el-option label="重要" value="2" /> |
| | | <el-option label="紧急" value="3" /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | <el-col :span="24"> |
| | | <el-form-item label="公告内容" prop="noticeContent"> |
| | | <el-input |
| | | v-model="form.content" |
| | | type="textarea" |
| | | :rows="6" |
| | | placeholder="请输入公告内容" |
| | | maxlength="500" |
| | | show-word-limit |
| | | v-model="form.noticeContent" |
| | | type="textarea" |
| | | :rows="6" |
| | | placeholder="请输入公告内容" |
| | | maxlength="500" |
| | | show-word-limit |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | <el-col :span="24"> |
| | | <el-form-item label="备注"> |
| | | <el-input |
| | | v-model="form.remark" |
| | | type="textarea" |
| | | :rows="3" |
| | | placeholder="请输入备注信息" |
| | | maxlength="200" |
| | | show-word-limit |
| | | v-model="form.remark" |
| | | type="textarea" |
| | | :rows="3" |
| | | placeholder="请输入备注信息" |
| | | maxlength="200" |
| | | show-word-limit |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | </template> |
| | | |
| | | <script setup> |
| | | import {Search, Calendar, Tools, InfoFilled} from "@element-plus/icons-vue"; |
| | | import {onMounted, ref, reactive, toRefs, computed} from "vue"; |
| | | import {ElMessage, ElMessageBox} from "element-plus"; |
| | | import { Search, Calendar, Tools, InfoFilled } from "@element-plus/icons-vue"; |
| | | import { onMounted, ref, reactive, toRefs, computed } from "vue"; |
| | | import { ElMessage, ElMessageBox } from "element-plus"; |
| | | import useUserStore from "@/store/modules/user"; |
| | | import { |
| | | addNotice, |
| | | delNotice, |
| | | getCount, |
| | | listNotice, |
| | | updateNotice |
| | | } from "../../../api/collaborativeApproval/noticeManagement.js"; |
| | | import pagination from "../../../components/PIMTable/Pagination.vue"; |
| | | |
| | | const userStore = useUserStore(); |
| | | |
| | | // 响应式数据 |
| | | const data = reactive({ |
| | | searchForm: { |
| | | title: "", |
| | | type: undefined, |
| | | status: undefined, |
| | | noticeTitle: "", |
| | | noticeType: "", |
| | | status: "", |
| | | }, |
| | | form: { |
| | | id: undefined, |
| | | title: "", |
| | | type: null, |
| | | content: "", |
| | | status: 0, |
| | | priority: 1, |
| | | noticeTitle: "", |
| | | noticeType: "", |
| | | noticeContent: "", |
| | | status: "0", |
| | | priority: "1", |
| | | remark: "", |
| | | createBy: "", |
| | | createTime: "", |
| | | }, |
| | | rules: { |
| | | title: [ |
| | | {required: true, message: "公告标题不能为空", trigger: "blur"} |
| | | noticeTitle: [ |
| | | { required: true, message: "公告标题不能为空", trigger: "blur" } |
| | | ], |
| | | type: [ |
| | | {required: true, message: "请选择公告类型", trigger: "change"} |
| | | noticeType: [ |
| | | { required: true, message: "请选择公告类型", trigger: "change" } |
| | | ], |
| | | content: [ |
| | | {required: true, message: "公告内容不能为空", trigger: "blur"} |
| | | noticeContent: [ |
| | | { required: true, message: "公告内容不能为空", trigger: "blur" } |
| | | ] |
| | | } |
| | | }); |
| | | |
| | | const {searchForm, form, rules} = toRefs(data); |
| | | const { searchForm, form, rules } = toRefs(data); |
| | | |
| | | // 页面状态 |
| | | const dialogVisible = ref(false); |
| | |
| | | const selectedIds = ref([]); |
| | | const formRef = ref(); |
| | | |
| | | // 模拟数据 - 根据法定节假日设计 |
| | | const mockData = [ |
| | | { |
| | | id: 1, |
| | | noticeTitle: "2024年春节放假通知", |
| | | noticeType: "1", |
| | | priority: "2", |
| | | status: "1", |
| | | noticeContent: "根据国务院办公厅通知,2024年春节放假安排如下:2月10日(初一)至2月17日(初八)放假调休,共8天。2月4日(星期日)、2月18日(星期日)上班。请各部门提前做好工作安排。", |
| | | remark: "放假期间请保持手机畅通,如有紧急事务及时联系", |
| | | createBy: "人事部", |
| | | createTime: "2025-01-15 10:30:00" |
| | | }, |
| | | { |
| | | id: 2, |
| | | noticeTitle: "2024年清明节放假通知", |
| | | noticeType: "1", |
| | | priority: "1", |
| | | status: "1", |
| | | noticeContent: "根据国务院办公厅通知,2024年清明节放假安排如下:4月4日(星期四)至4月6日(星期六)放假调休,共3天。4月7日(星期日)上班。", |
| | | remark: "请各部门做好值班安排,确保节日期间各项工作正常运转", |
| | | createBy: "行政部", |
| | | createTime: "2025-01-14 14:20:00" |
| | | }, |
| | | { |
| | | id: 3, |
| | | noticeTitle: "2024年劳动节放假通知", |
| | | noticeType: "1", |
| | | priority: "1", |
| | | status: "1", |
| | | noticeContent: "根据国务院办公厅通知,2024年劳动节放假安排如下:5月1日(星期三)至5月5日(星期日)放假调休,共5天。4月28日(星期日)、5月11日(星期六)上班。", |
| | | remark: "放假前请关闭电源,锁好门窗,注意安全", |
| | | createBy: "行政部", |
| | | createTime: "2025-01-13 09:15:00" |
| | | }, |
| | | { |
| | | id: 4, |
| | | noticeTitle: "2024年端午节放假通知", |
| | | noticeType: "1", |
| | | priority: "1", |
| | | status: "1", |
| | | noticeContent: "根据国务院办公厅通知,2024年端午节放假安排如下:6月8日(星期六)至6月10日(星期一)放假调休,共3天。6月11日(星期二)上班。", |
| | | remark: "祝大家端午节快乐,阖家幸福!", |
| | | createBy: "行政部", |
| | | createTime: "2025-01-12 16:30:00" |
| | | }, |
| | | { |
| | | id: 5, |
| | | noticeTitle: "2024年中秋节放假通知", |
| | | noticeType: "1", |
| | | priority: "1", |
| | | status: "1", |
| | | noticeContent: "根据国务院办公厅通知,2024年中秋节放假安排如下:9月15日(星期日)至9月17日(星期二)放假调休,共3天。9月14日(星期六)上班。", |
| | | remark: "中秋佳节,祝大家团圆美满,幸福安康!", |
| | | createBy: "行政部", |
| | | createTime: "2025-01-11 11:20:00" |
| | | }, |
| | | { |
| | | id: 6, |
| | | noticeTitle: "2024年国庆节放假通知", |
| | | noticeType: "1", |
| | | priority: "2", |
| | | status: "1", |
| | | noticeContent: "根据国务院办公厅通知,2024年国庆节放假安排如下:10月1日(星期二)至10月7日(星期一)放假调休,共7天。9月29日(星期日)、10月12日(星期六)上班。", |
| | | remark: "国庆期间请各部门做好值班安排,确保安全稳定", |
| | | createBy: "行政部", |
| | | createTime: "2025-01-10 15:45:00" |
| | | }, |
| | | { |
| | | id: 7, |
| | | noticeTitle: "A车间生产线年度检修通知", |
| | | noticeType: "2", |
| | | priority: "2", |
| | | status: "1", |
| | | noticeContent: "A车间生产线将于2024年1月20日(周六)进行年度检修维护,预计停工8小时。检修内容包括:设备清洁、润滑保养、安全装置检查等。请生产部门提前调整生产计划。", |
| | | remark: "维修期间请相关人员配合,确保检修工作安全顺利进行", |
| | | createBy: "设备部", |
| | | createTime: "2025-01-14 14:20:00" |
| | | }, |
| | | { |
| | | id: 8, |
| | | noticeTitle: "B车间设备预防性维护通知", |
| | | noticeType: "2", |
| | | priority: "1", |
| | | status: "1", |
| | | noticeContent: "B车间关键设备将于2024年1月25日进行预防性维护,预计停工4小时。维护内容包括:设备检查、零件更换、性能测试等。请相关部门配合。", |
| | | remark: "维护完成后将进行试运行,确保设备正常运行", |
| | | createBy: "设备部", |
| | | createTime: "2025-01-13 09:15:00" |
| | | } |
| | | ]; |
| | | |
| | | // 计算属性 |
| | | const filteredNotices = computed(() => { |
| | | let filtered = [...mockData]; |
| | | |
| | | |
| | | if (searchForm.value.noticeTitle) { |
| | | filtered = filtered.filter(item => |
| | | item.noticeTitle.includes(searchForm.value.noticeTitle) |
| | | filtered = filtered.filter(item => |
| | | item.noticeTitle.includes(searchForm.value.noticeTitle) |
| | | ); |
| | | } |
| | | if (searchForm.value.noticeType) { |
| | | filtered = filtered.filter(item => |
| | | item.noticeType === searchForm.value.noticeType |
| | | filtered = filtered.filter(item => |
| | | item.noticeType === searchForm.value.noticeType |
| | | ); |
| | | } |
| | | if (searchForm.value.status !== "") { |
| | | filtered = filtered.filter(item => |
| | | item.status === searchForm.value.status |
| | | filtered = filtered.filter(item => |
| | | item.status === searchForm.value.status |
| | | ); |
| | | } |
| | | |
| | | |
| | | return filtered; |
| | | }); |
| | | |
| | | const holidayNotices = computed(() => { |
| | | return filteredNotices.value.filter(notice => notice.noticeType === "1"); |
| | | }); |
| | | |
| | | const maintenanceNotices = computed(() => { |
| | | return filteredNotices.value.filter(notice => notice.noticeType === "2"); |
| | | }); |
| | | |
| | | // 方法定义 |
| | |
| | | |
| | | const resetQuery = () => { |
| | | searchForm.value = { |
| | | title: "", |
| | | type: "", |
| | | noticeTitle: "", |
| | | noticeType: "", |
| | | status: "" |
| | | }; |
| | | }; |
| | | |
| | | const getPriorityText = (priority) => { |
| | | const priorityMap = {"1": "普通", "2": "重要", "3": "紧急"}; |
| | | const priorityMap = { "1": "普通", "2": "重要", "3": "紧急" }; |
| | | return priorityMap[priority] || "普通"; |
| | | }; |
| | | |
| | | const getStatusText = (status) => { |
| | | const statusMap = {"0": "草稿", "1": "已发布", "2": "已下线"}; |
| | | const statusMap = { "0": "草稿", "1": "已发布", "2": "已下线" }; |
| | | return statusMap[status] || "未知"; |
| | | }; |
| | | |
| | |
| | | dialogTitle.value = "新增公告"; |
| | | form.value = { |
| | | id: undefined, |
| | | title: "", |
| | | type: undefined, |
| | | content: "", |
| | | status: 0, |
| | | priority: 1, |
| | | noticeTitle: "", |
| | | noticeType: "", |
| | | noticeContent: "", |
| | | status: "0", |
| | | priority: "1", |
| | | remark: "", |
| | | createBy: userStore.name || "当前用户", |
| | | createTime: new Date().toLocaleString() |
| | | }; |
| | | } |
| | | dialogVisible.value = true; |
| | |
| | | |
| | | const handleEdit = (row) => { |
| | | dialogTitle.value = "编辑公告"; |
| | | form.value = {...row}; |
| | | form.value = { ...row }; |
| | | dialogVisible.value = true; |
| | | }; |
| | | |
| | | const handleSelectionChange = (selection) => { |
| | | selectedIds.value = selection.map(item => item.id); |
| | | }; |
| | | |
| | | const handleDelete = (id) => { |
| | | ElMessageBox.confirm( |
| | | "确认删除这条公告吗?", |
| | | "提示", |
| | | { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning" |
| | | } |
| | | "确认删除这条公告吗?", |
| | | "提示", |
| | | { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning" |
| | | } |
| | | ).then(() => { |
| | | delNotice(id).then(res => { |
| | | const index = mockData.findIndex(item => item.id === id); |
| | | if (index > -1) { |
| | | mockData.splice(index, 1); |
| | | ElMessage.success("删除成功"); |
| | | resetTable() |
| | | }) |
| | | } |
| | | }); |
| | | }; |
| | | |
| | |
| | | if (valid) { |
| | | if (form.value.id) { |
| | | // 编辑模式 |
| | | updateNotice(form.value).then(res => { |
| | | ElMessage.success("修改成功"); |
| | | resetTable() |
| | | }) |
| | | const index = mockData.findIndex(item => item.id === form.value.id); |
| | | if (index > -1) { |
| | | mockData[index] = { ...form.value }; |
| | | } |
| | | ElMessage.success("修改成功"); |
| | | } else { |
| | | // 新增模式 |
| | | addNotice(form.value).then(res => { |
| | | ElMessage.success("新增成功"); |
| | | resetTable() |
| | | }) |
| | | const newId = Math.max(...mockData.map(item => item.id)) + 1; |
| | | const newNotice = { |
| | | ...form.value, |
| | | id: newId, |
| | | createTime: new Date().toLocaleString() |
| | | }; |
| | | mockData.unshift(newNotice); |
| | | ElMessage.success("新增成功"); |
| | | } |
| | | dialogVisible.value = false; |
| | | } |
| | | }); |
| | | }; |
| | | |
| | | const holidayNoticeCount = ref() |
| | | const maintenanceNoticeCount = ref() |
| | | const fetchCount = () => { |
| | | getCount().then(res => { |
| | | holidayNoticeCount.value = res.data.filter(item => { |
| | | return item.type === 1 |
| | | })[0].count; |
| | | maintenanceNoticeCount.value = res.data.filter(item => { |
| | | return item.type === 2 |
| | | })[0].count; |
| | | }); |
| | | } |
| | | |
| | | const holidayNotices = ref([]) |
| | | const maintenanceNotices = ref([]) |
| | | const holidayNoticePage = ref({ |
| | | total: 0, |
| | | current: 1, |
| | | size: 6 |
| | | }) |
| | | |
| | | const maintenanceNoticePage = ref({ |
| | | total: 0, |
| | | current: 1, |
| | | size: 6 |
| | | }) |
| | | |
| | | const fetchHolidayNotices = () => { |
| | | listNotice({...holidayNoticePage.value, type: 1}).then(res => { |
| | | holidayNotices.value = res.data.records |
| | | holidayNoticePage.value.total = res.data.total |
| | | }); |
| | | }; |
| | | |
| | | const fetchMaintenanceNotices = () => { |
| | | listNotice({...holidayNoticePage.value, type: 2}).then(res => { |
| | | maintenanceNotices.value = res.data.records |
| | | maintenanceNoticePage.value.total = res.data.total |
| | | }); |
| | | }; |
| | | |
| | | const handleHolidayNoticeCurrentChange = (val) => { |
| | | holidayNoticePage.value.size = val.limit |
| | | holidayNoticePage.value.current = val.page |
| | | fetchHolidayNotices() |
| | | }; |
| | | |
| | | const handleMaintenanceNoticeCurrentChange = (val) => { |
| | | maintenanceNoticePage.value.size = val.limit |
| | | maintenanceNoticePage.value.current = val.page |
| | | fetchMaintenanceNotices() |
| | | }; |
| | | |
| | | const resetTable = () => { |
| | | holidayNoticePage.value.current = 1 |
| | | holidayNoticePage.value.size = 6 |
| | | maintenanceNoticePage.value.current = 1 |
| | | maintenanceNoticePage.value.size = 6 |
| | | fetchHolidayNotices() |
| | | fetchMaintenanceNotices() |
| | | fetchCount() |
| | | }; |
| | | |
| | | const resetForm = () => { |
| | |
| | | |
| | | // 生命周期 |
| | | onMounted(() => { |
| | | fetchCount() |
| | | fetchHolidayNotices() |
| | | fetchMaintenanceNotices() |
| | | // 页面加载完成 |
| | | }); |
| | | </script> |
| | | |
| | |
| | | font-weight: 500; |
| | | } |
| | | |
| | | .priority-1 { |
| | | background: #f0f9ff; |
| | | color: #0369a1; |
| | | } |
| | | .priority-1 { background: #f0f9ff; color: #0369a1; } |
| | | .priority-2 { background: #fef3c7; color: #d97706; } |
| | | .priority-3 { background: #fef2f2; color: #dc2626; } |
| | | |
| | | .priority-2 { |
| | | background: #fef3c7; |
| | | color: #d97706; |
| | | } |
| | | |
| | | .priority-3 { |
| | | background: #fef2f2; |
| | | color: #dc2626; |
| | | } |
| | | |
| | | .status-0 { |
| | | background: #f3f4f6; |
| | | color: #6b7280; |
| | | } |
| | | |
| | | .status-1 { |
| | | background: #d1fae5; |
| | | color: #059669; |
| | | } |
| | | |
| | | .status-2 { |
| | | background: #fef3c7; |
| | | color: #d97706; |
| | | } |
| | | .status-0 { background: #f3f4f6; color: #6b7280; } |
| | | .status-1 { background: #d1fae5; color: #059669; } |
| | | .status-2 { background: #fef3c7; color: #d97706; } |
| | | |
| | | .card-info { |
| | | display: flex; |
| | |
| | | .notice-cards { |
| | | grid-template-columns: 1fr; |
| | | } |
| | | |
| | | |
| | | .search_form { |
| | | flex-direction: column; |
| | | gap: 15px; |
| | | } |
| | | |
| | | |
| | | .search_form > div { |
| | | width: 100%; |
| | | } |
| | |
| | | status: "published", |
| | | content: "根据国家规定,结合公司实际情况,现将2024年春节放假安排通知如下...", |
| | | departments: ["技术部", "销售部", "人事部", "财务部", "运营部", "市场部", "客服部"], |
| | | expireDate: "2024-02-15", |
| | | expireDate: "2025-02-15", |
| | | syncMethods: ["wechat", "dingtalk", "email"], |
| | | createTime: "2024-01-15 10:30:00" |
| | | createTime: "2025-01-15 10:30:00" |
| | | }, |
| | | { |
| | | id: "2", |
| | |
| | | status: "published", |
| | | content: "技术部定于每周五下午2点召开周例会,请各位同事准时参加...", |
| | | departments: ["技术部"], |
| | | expireDate: "2024-01-20", |
| | | expireDate: "2025-01-20", |
| | | syncMethods: ["wechat", "dingtalk"], |
| | | createTime: "2024-01-14 15:20:00" |
| | | createTime: "2025-01-14 15:20:00" |
| | | }, |
| | | { |
| | | id: "3", |
| | |
| | | status: "draft", |
| | | content: "为维护公司正常秩序,规范员工行为,现对违反公司规定的行为进行处罚...", |
| | | departments: ["人事部", "技术部", "销售部"], |
| | | expireDate: "2024-02-13", |
| | | expireDate: "2025-02-13", |
| | | syncMethods: ["wechat", "email"], |
| | | createTime: "2024-01-13 09:15:00" |
| | | createTime: "2025-01-13 09:15:00" |
| | | } |
| | | ]; |
| | | |
| | |
| | | programName: "订单处理RPA", |
| | | status: "running", |
| | | description: "自动处理客户订单,包括验证、分配和确认", |
| | | createTime: "2024-01-15 10:30:00" |
| | | createTime: "2025-01-15 10:30:00" |
| | | }, |
| | | { |
| | | id: "2", |
| | | programName: "库存同步RPA", |
| | | status: "stopped", |
| | | description: "同步多个仓库的库存数据,确保数据一致性", |
| | | createTime: "2024-01-14 15:20:00" |
| | | createTime: "2025-01-14 15:20:00" |
| | | }, |
| | | { |
| | | id: "3", |
| | | programName: "报表生成RPA", |
| | | status: "error", |
| | | description: "自动生成每日销售报表和库存报表", |
| | | createTime: "2024-01-13 09:15:00" |
| | | createTime: "2025-01-13 09:15:00" |
| | | } |
| | | ]; |
| | | |
| | |
| | | version: 'v2.1.0', |
| | | status: 'active', |
| | | accuracy: '94.2%', |
| | | lastUpdate: '2024-01-15 14:30:00' |
| | | lastUpdate: '2025-01-15 14:30:00' |
| | | }, |
| | | { |
| | | modelName: '地层压力预测模型', |
| | | version: 'v1.8.5', |
| | | status: 'active', |
| | | accuracy: '91.7%', |
| | | lastUpdate: '2024-01-14 09:15:00' |
| | | lastUpdate: '2025-01-14 09:15:00' |
| | | }, |
| | | { |
| | | modelName: '能耗分析模型', |
| | | version: 'v2.0.3', |
| | | status: 'standby', |
| | | accuracy: '89.3%', |
| | | lastUpdate: '2024-01-13 16:45:00' |
| | | lastUpdate: '2025-01-13 16:45:00' |
| | | } |
| | | ]) |
| | | |
| | |
| | | power: '75.5', |
| | | powerFactor: '0.85', |
| | | status: '正常', |
| | | lastUpdateTime: '2024-01-15 10:30:00' |
| | | lastUpdateTime: '2025-01-15 10:30:00' |
| | | }, |
| | | { |
| | | id: 2, |
| | |
| | | power: '45.2', |
| | | powerFactor: '0.92', |
| | | status: '正常', |
| | | lastUpdateTime: '2024-01-15 10:25:00' |
| | | lastUpdateTime: '2025-01-15 10:25:00' |
| | | } |
| | | ] |
| | | this.pagination.total = this.meterList.length |
| | |
| | | power: '50.0', |
| | | powerFactor: '0.85', |
| | | status: '正常', |
| | | lastUpdateTime: '2024-01-15 12:00:00' |
| | | lastUpdateTime: '2025-01-15 12:00:00' |
| | | } |
| | | this.detailDialogVisible = true |
| | | }, |
| | |
| | | const maintenanceRecords = ref([ |
| | | { |
| | | id: 1, |
| | | date: '2024-01-15', |
| | | date: '2025-01-15', |
| | | type: 'inspection', |
| | | title: '年度检验', |
| | | description: '按照TSG 21-2016标准进行年度检验,设备状态良好', |
| | |
| | | }, |
| | | { |
| | | id: 2, |
| | | date: '2024-02-20', |
| | | date: '2025-02-20', |
| | | type: 'maintenance', |
| | | title: '安全阀维护', |
| | | description: '更换安全阀密封圈,校准压力设定值', |
| | |
| | | }, |
| | | { |
| | | id: 3, |
| | | date: '2024-03-10', |
| | | date: '2025-03-10', |
| | | type: 'inspection', |
| | | title: '压力测试', |
| | | description: '进行压力容器水压试验,符合设计要求', |
| | |
| | | modalOptions, |
| | | handleConfirm, |
| | | closeModal, |
| | | } = useModal({ title: "设备维修" }); |
| | | } = useModal({ title: "设备保养" }); |
| | | |
| | | /** |
| | | * @desc 保存保养 |
| | |
| | | <el-table-column |
| | | label="出库日期" |
| | | prop="createTime" |
| | | min-width="250" |
| | | min-width="130" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | |
| | | <el-table-column |
| | | label="含税单价(元)" |
| | | prop="taxInclusiveUnitPrice" |
| | | width="100" |
| | | width="200" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | | label="含税总价(元)" |
| | | prop="taxInclusiveTotalPrice" |
| | | width="100" |
| | | width="200" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | |
| | | warningLevel: '紧急', |
| | | warningThreshold: 20, |
| | | isEnabled: true, |
| | | warningTime: '2024-01-15 08:30:00', |
| | | warningTime: '2025-01-15 08:30:00', |
| | | warningDuration: 3, |
| | | lastUpdateTime: '2024-01-15 10:00:00', |
| | | expectedRefillTime: '2024-01-16 14:00:00', |
| | | expectedShortageTime: '2024-01-15 18:30:00', // 今天下午6:30缺气 |
| | | lastUpdateTime: '2025-01-15 10:00:00', |
| | | expectedRefillTime: '2025-01-16 14:00:00', |
| | | expectedShortageTime: '2025-01-15 18:30:00', // 今天下午6:30缺气 |
| | | warningRule: '当气体量低于20%时触发预警' |
| | | }, |
| | | { |
| | |
| | | warningLevel: '重要', |
| | | warningThreshold: 10, |
| | | isEnabled: true, |
| | | warningTime: '2024-01-14 16:20:00', |
| | | warningTime: '2025-01-14 16:20:00', |
| | | warningDuration: 2, |
| | | lastUpdateTime: '2024-01-15 09:15:00', |
| | | expectedRefillTime: '2024-01-17 09:00:00', |
| | | expectedShortageTime: '2024-01-18 12:00:00', // 3天后缺气 |
| | | lastUpdateTime: '2025-01-15 09:15:00', |
| | | expectedRefillTime: '2025-01-17 09:00:00', |
| | | expectedShortageTime: '2025-01-18 12:00:00', // 3天后缺气 |
| | | warningRule: '当压力超过8MPa时触发预警' |
| | | }, |
| | | { |
| | |
| | | warningLevel: '一般', |
| | | warningThreshold: 5, |
| | | isEnabled: true, |
| | | warningTime: '2024-01-13 11:45:00', |
| | | warningTime: '2025-01-13 11:45:00', |
| | | warningDuration: 1, |
| | | lastUpdateTime: '2024-01-15 08:45:00', |
| | | expectedRefillTime: '2024-01-20 10:00:00', |
| | | expectedShortageTime: '2024-01-22 15:30:00', // 7天后缺气 |
| | | lastUpdateTime: '2025-01-15 08:45:00', |
| | | expectedRefillTime: '2025-01-20 10:00:00', |
| | | expectedShortageTime: '2025-01-22 15:30:00', // 7天后缺气 |
| | | warningRule: '当温度超过60°C时触发预警' |
| | | }, |
| | | { |
| | |
| | | warningLevel: '紧急', |
| | | warningThreshold: 15, |
| | | isEnabled: true, |
| | | warningTime: '2024-01-15 07:15:00', |
| | | warningTime: '2025-01-15 07:15:00', |
| | | warningDuration: 4, |
| | | lastUpdateTime: '2024-01-15 11:30:00', |
| | | expectedRefillTime: '2024-01-15 16:00:00', |
| | | expectedShortageTime: '2024-01-15 14:00:00', // 今天下午2点缺气 |
| | | lastUpdateTime: '2025-01-15 11:30:00', |
| | | expectedRefillTime: '2025-01-15 16:00:00', |
| | | expectedShortageTime: '2025-01-15 14:00:00', // 今天下午2点缺气 |
| | | warningRule: '当检测到气体泄漏时触发预警' |
| | | }, |
| | | { |
| | |
| | | warningLevel: '重要', |
| | | warningThreshold: 20, |
| | | isEnabled: false, |
| | | warningTime: '2024-01-14 14:30:00', |
| | | warningTime: '2025-01-14 14:30:00', |
| | | warningDuration: 2, |
| | | lastUpdateTime: '2024-01-15 09:00:00', |
| | | expectedRefillTime: '2024-01-19 08:00:00', |
| | | expectedShortageTime: '2024-01-21 10:00:00', // 6天后缺气 |
| | | lastUpdateTime: '2025-01-15 09:00:00', |
| | | expectedRefillTime: '2025-01-19 08:00:00', |
| | | expectedShortageTime: '2025-01-21 10:00:00', // 6天后缺气 |
| | | warningRule: '当气体量低于20%时触发预警' |
| | | }, |
| | | { |
| | |
| | | warningLevel: '一般', |
| | | warningThreshold: 8, |
| | | isEnabled: true, |
| | | warningTime: '2024-01-12 09:20:00', |
| | | warningTime: '2025-01-12 09:20:00', |
| | | warningDuration: 1, |
| | | lastUpdateTime: '2024-01-15 08:30:00', |
| | | expectedRefillTime: '2024-01-25 14:00:00', |
| | | expectedShortageTime: '2024-01-28 16:00:00', // 13天后缺气 |
| | | lastUpdateTime: '2025-01-15 08:30:00', |
| | | expectedRefillTime: '2025-01-25 14:00:00', |
| | | expectedShortageTime: '2025-01-28 16:00:00', // 13天后缺气 |
| | | warningRule: '当压力超过8MPa时触发预警' |
| | | }, |
| | | { |
| | |
| | | warningLevel: '重要', |
| | | warningThreshold: 6, |
| | | isEnabled: true, |
| | | warningTime: '2024-01-11 16:45:00', |
| | | warningTime: '2025-01-11 16:45:00', |
| | | warningDuration: 1, |
| | | lastUpdateTime: '2024-01-15 07:45:00', |
| | | expectedRefillTime: '2024-01-30 09:00:00', |
| | | expectedShortageTime: '2024-02-05 12:00:00', // 21天后缺气 |
| | | lastUpdateTime: '2025-01-15 07:45:00', |
| | | expectedRefillTime: '2025-01-30 09:00:00', |
| | | expectedShortageTime: '2025-02-05 12:00:00', // 21天后缺气 |
| | | warningRule: '当温度超过60°C时触发预警' |
| | | }, |
| | | { |
| | |
| | | warningLevel: '紧急', |
| | | warningThreshold: 12, |
| | | isEnabled: true, |
| | | warningTime: '2024-01-15 06:30:00', |
| | | warningTime: '2025-01-15 06:30:00', |
| | | warningDuration: 5, |
| | | lastUpdateTime: '2024-01-15 12:15:00', |
| | | expectedRefillTime: '2024-01-15 20:00:00', |
| | | expectedShortageTime: '2024-01-15 17:30:00', // 今天下午5:30缺气 |
| | | lastUpdateTime: '2025-01-15 12:15:00', |
| | | expectedRefillTime: '2025-01-15 20:00:00', |
| | | expectedShortageTime: '2025-01-15 17:30:00', // 今天下午5:30缺气 |
| | | warningRule: '当检测到气体泄漏时触发预警' |
| | | } |
| | | ] |
| | |
| | | <style lang='scss' scoped>
|
| | | .login {
|
| | | height: 100%;
|
| | | background-image: url("../assets/images/login-background.png");
|
| | | background-image: url("../assets/indexViews/JZYJView.png");
|
| | | background-size: cover;
|
| | | position: relative;
|
| | | }
|
| | |
| | | }, |
| | | }, |
| | | { |
| | | label: "已开票金额(元)", |
| | | label: "已来票金额(元)", |
| | | prop: "receiptPaymentAmount", |
| | | width:200, |
| | | formatData: (val) => { |
| | |
| | | }, |
| | | }, |
| | | { |
| | | label: "待开票金额(元)", |
| | | label: "待来票金额(元)", |
| | | prop: "unReceiptPaymentAmount", |
| | | width:200, |
| | | formatData: (val) => { |
| | |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="登记人:" prop="registrant"> |
| | | <el-input |
| | | v-model="form.registrant" |
| | | placeholder="请输入" |
| | | clearable |
| | | disabled |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="付款日期:" prop="paymentDate"> |
| | | <el-date-picker |
| | | style="width: 100%" |
| | | v-model="form.paymentDate" |
| | | value-format="YYYY-MM-DD" |
| | | format="YYYY-MM-DD" |
| | | type="date" |
| | | placeholder="请选择" |
| | | clearable |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <el-row :gutter="30"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="付款日期:" prop="paymentDate"> |
| | | <el-date-picker |
| | | style="width: 100%" |
| | | v-model="form.paymentDate" |
| | | value-format="YYYY-MM-DD" |
| | | format="YYYY-MM-DD" |
| | | type="date" |
| | | placeholder="请选择" |
| | | clearable |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="登记人:" prop="registrant"> |
| | | <el-input |
| | | v-model="form.registrant" |
| | | placeholder="请输入" |
| | | clearable |
| | | disabled |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="登记日期:" prop="registrationtDate"> |
| | | <el-input |
| | |
| | | const isShowSummarySon = ref(true); |
| | | const tableColumn = ref([ |
| | | { |
| | | label: "采购合同号", |
| | | prop: "purchaseContractNumber", |
| | | }, |
| | | { |
| | | label: "付款日期", |
| | | prop: "paymentDate", |
| | | }, |
| | |
| | | defineOptions({ |
| | | name: "来票台账表单", |
| | | }); |
| | | |
| | | const temFutureTickets = ref(0) |
| | | const { form, resetForm } = useFormData({ |
| | | id: undefined, |
| | | purchaseContractNumber: undefined, // 采购合同号 |
| | |
| | | form.ticketsAmount = data.ticketsAmount.toFixed(2); |
| | | form.taxInclusiveUnitPrice = data.taxInclusiveUnitPrice; |
| | | form.futureTickets = data.futureTickets; |
| | | temFutureTickets.value = data.futureTickets; |
| | | } |
| | | }; |
| | | |
| | |
| | | proxy.$modal.msgWarning("含税单价不能为零或未定义"); |
| | | return; |
| | | } |
| | | |
| | | if (Number(form.ticketsNum) > Number(form.futureTickets)) { |
| | | if (Number(form.ticketsNum) > Number(temFutureTickets.value)) { |
| | | proxy.$modal.msgWarning("开票数不得大于未开票数"); |
| | | form.ticketsNum = form.futureTickets |
| | | return; |
| | | form.ticketsNum = temFutureTickets.value |
| | | } |
| | | |
| | | // 确保所有数值都转换为数字类型进行计算 |
| | | const ticketsAmount = Number(val) * Number(form.taxInclusiveUnitPrice); |
| | | const futureTickets = Number(form.futureTickets) - Number(val); |
| | | const ticketsAmount = Number(form.ticketsNum) * Number(form.taxInclusiveUnitPrice); |
| | | const futureTickets = Number(temFutureTickets.value) - Number(form.ticketsNum); |
| | | form.futureTickets = Number(futureTickets.toFixed(2)); |
| | | form.ticketsAmount = Number(ticketsAmount.toFixed(2)); |
| | | }; |
| | |
| | | width: 150, |
| | | }, |
| | | { |
| | | label: "客户名称", |
| | | prop: "customerName", |
| | | label: "项目名称", |
| | | prop: "projectName", |
| | | width: 240, |
| | | }, |
| | | { |
| | | label: "供应商名称", |
| | | prop: "supplierName", |
| | | width: 240, |
| | | }, |
| | | { |
| | | label: "产品大类", |
| | | prop: "productCategory", |
| | | width: 150, |
| | | }, |
| | | { |
| | | label: "规格型号", |
| | |
| | | }, |
| | | }, |
| | | { |
| | | label: "开票日期", |
| | | label: "本次来票数", |
| | | prop: "ticketsNum", |
| | | width: 110, |
| | | }, |
| | | { |
| | | label: "来票日期", |
| | | prop: "createdAt", |
| | | width: 110, |
| | | }, |
| | | { |
| | | label: "开票金额", |
| | | label: "来票金额(元)", |
| | | prop: "ticketsAmount", |
| | | width: 200, |
| | | formatData: (cell) => { |
| | |
| | | emergencyRecords: [ |
| | | { |
| | | id: 'EM001', |
| | | time: '2024-01-15 14:35:12', |
| | | time: '2025-01-15 14:35:12', |
| | | location: '储罐T-003', |
| | | type: '甲烷超标', |
| | | status: 'resolved', |
| | |
| | | }, |
| | | { |
| | | id: 'EM002', |
| | | time: '2024-01-15 14:35:15', |
| | | time: '2025-01-15 14:35:15', |
| | | location: '压缩机C-002', |
| | | type: '硫化氢超标', |
| | | status: 'processing', |
| | |
| | | const baseUrl =
|
| | | VITE_APP_ENV == "development"
|
| | | ? "http://114.132.189.42:8089" // 开发环境后端接口
|
| | | : "http://114.132.189.42:7003"; // 生产环境后端接口
|
| | | // : "http://114.132.189.42:8068"; // 韦德实业生产环境后端接口
|
| | | : "http://114.132.189.42:8078"; // 基智油井生产环境后端接口
|
| | |
|
| | | return {
|
| | | // 部署生产环境和开发环境下的URL。
|