<template> 
 | 
  <div class="app-container"> 
 | 
    <el-card class="box-card"> 
 | 
      <template #header> 
 | 
        <div class="card-header"> 
 | 
          <span>用印管理发布</span> 
 | 
        </div> 
 | 
      </template> 
 | 
  
 | 
       
 | 
   <!-- 用印申请管理 --> 
 | 
        <div class="tab-content"> 
 | 
            <el-row :gutter="20" class="mb-20 "> 
 | 
              <span class="ml-10">用印标题:</span> 
 | 
              <el-col :span="6"> 
 | 
                <el-input v-model="sealSearchForm.title" placeholder="请输入申请标题" clearable /> 
 | 
              </el-col> 
 | 
              <span class="search_title">审批状态:</span> 
 | 
              <el-col :span="6"> 
 | 
                <el-select v-model="sealSearchForm.status" placeholder="审批状态" clearable> 
 | 
                  <el-option label="待审批" value="pending" /> 
 | 
                  <el-option label="已通过" value="approved" /> 
 | 
                  <el-option label="已拒绝" value="rejected" /> 
 | 
                </el-select> 
 | 
              </el-col> 
 | 
              <el-col :span="8"> 
 | 
                <el-button type="primary" @click="searchSealApplications">搜索</el-button> 
 | 
                <el-button @click="resetSealSearch">重置</el-button> 
 | 
                <el-button type="primary" @click="showSealApplyDialog = true">申请用印 
 | 
                </el-button> 
 | 
              </el-col> 
 | 
            </el-row> 
 | 
  
 | 
            <el-table :data="sealApplications" border v-loading="tableLoading" style="width: 100%"> 
 | 
              <el-table-column prop="applicationNum" label="申请编号" width="120" /> 
 | 
              <el-table-column prop="title" label="申请标题" min-width="200" /> 
 | 
              <el-table-column prop="createUserName" label="申请人" width="120" /> 
 | 
              <el-table-column prop="department" label="所属部门" width="150" /> 
 | 
              <el-table-column prop="sealType" label="用印类型" width="120"> 
 | 
                <template #default="scope"> 
 | 
                  {{ getSealTypeText(scope.row.sealType) }} 
 | 
                </template> 
 | 
              </el-table-column> 
 | 
              <el-table-column prop="createTime" label="申请时间" width="180" /> 
 | 
              <el-table-column prop="status" label="状态" width="100"> 
 | 
                <template #default="scope"> 
 | 
                  <el-tag :type="getStatusType(scope.row.status)"> 
 | 
                    {{ getStatusText(scope.row.status) }} 
 | 
                  </el-tag> 
 | 
                </template> 
 | 
              </el-table-column> 
 | 
              <el-table-column label="操作" width="200" fixed="right"> 
 | 
                <template #default="scope"> 
 | 
                  <el-button link @click="viewSealDetail(scope.row)">查看</el-button> 
 | 
                  <el-button  
 | 
                    v-if="scope.row.status === 'pending'" 
 | 
                                        link 
 | 
                    type="primary"  
 | 
                    @click="approveSeal(scope.row)" 
 | 
                  > 
 | 
                    审批 
 | 
                  </el-button> 
 | 
                  <el-button  
 | 
                    v-if="scope.row.status === 'pending'" 
 | 
                                        link 
 | 
                    type="danger"  
 | 
                    @click="rejectSeal(scope.row)" 
 | 
                  > 
 | 
                    拒绝 
 | 
                  </el-button> 
 | 
                </template> 
 | 
              </el-table-column> 
 | 
            </el-table> 
 | 
        </div>  
 | 
    </el-card> 
 | 
       
 | 
         
 | 
           
 | 
         
 | 
  
 | 
        <!-- 规章制度管理 --> 
 | 
         
 | 
          <!-- <div class="tab-content"> 
 | 
            <el-row :gutter="20" class="mb-20"> 
 | 
              <el-col :span="6"> 
 | 
                <el-input v-model="regulationSearchForm.title" placeholder="请输入制度标题" clearable /> 
 | 
              </el-col> 
 | 
              <el-col :span="4"> 
 | 
                <el-select v-model="regulationSearchForm.category" placeholder="制度分类" clearable> 
 | 
                  <el-option label="人事制度" value="hr" /> 
 | 
                  <el-option label="财务制度" value="finance" /> 
 | 
                  <el-option label="安全制度" value="safety" /> 
 | 
                  <el-option label="技术制度" value="tech" /> 
 | 
                </el-select> 
 | 
              </el-col> 
 | 
              <el-col :span="8"> 
 | 
                <el-button type="primary" @click="searchRegulations">搜索</el-button> 
 | 
                <el-button @click="resetRegulationSearch">重置</el-button> 
 | 
                <el-button type="success" @click="handleAdd"> 
 | 
                  发布制度 
 | 
                </el-button> 
 | 
              </el-col> 
 | 
            </el-row> 
 | 
  
 | 
            <el-table :data="regulations" border v-loading="tableLoading"  style="width: 100%"> 
 | 
              <el-table-column prop="regulationNum" label="制度编号" width="120" /> 
 | 
              <el-table-column prop="title" label="制度标题" min-width="200" /> 
 | 
              <el-table-column prop="category" label="分类" width="120"> 
 | 
                <template #default="scope"> 
 | 
                  <el-tag>{{ getCategoryText(scope.row.category) }}</el-tag> 
 | 
                </template> 
 | 
              </el-table-column> 
 | 
              <el-table-column prop="version" label="版本" width="80" /> 
 | 
              <el-table-column prop="createUserName" label="发布人" width="120" /> 
 | 
              <el-table-column prop="createTime" label="发布时间" width="180" /> 
 | 
              <el-table-column prop="status" label="状态" width="100"> 
 | 
                <template #default="scope"> 
 | 
                  <el-tag :type="scope.row.status === 'active' ? 'success' : 'info'"> 
 | 
                    {{ scope.row.status === 'active' ? '生效中' : '已废止' }} 
 | 
                  </el-tag> 
 | 
                </template> 
 | 
              </el-table-column> 
 | 
              <el-table-column prop="readCount" label="已读人数" width="100" /> 
 | 
              <el-table-column label="操作" width="250" fixed="right"> 
 | 
                <template #default="scope"> 
 | 
                  <el-button link @click="viewRegulation(scope.row)">查看</el-button> 
 | 
                  <el-button link type="primary" @click="handleEdit(scope.row)">编辑</el-button> 
 | 
                  <el-button link type="danger" @click="repealEdit(scope.row)">废弃</el-button> 
 | 
                  <el-button link type="success" @click="viewVersionHistory(scope.row)">版本历史</el-button> 
 | 
                  <el-button link type="warning" @click="viewReadStatus(scope.row)">阅读状态</el-button> 
 | 
                </template> 
 | 
              </el-table-column> 
 | 
            </el-table> 
 | 
                 
 | 
          </div> --> 
 | 
         
 | 
  
 | 
    <!-- 用印申请对话框 --> 
 | 
    <el-dialog v-model="showSealApplyDialog" title="申请用印" width="600px"> 
 | 
      <el-form :model="sealForm" :rules="sealRules" ref="sealFormRef" label-width="100px"> 
 | 
        <el-form-item label="申请编号" prop="applicationNum"> 
 | 
          <el-input v-model="sealForm.applicationNum" placeholder="请输入申请编号" /> 
 | 
        </el-form-item> 
 | 
        <el-form-item label="申请标题" prop="title"> 
 | 
          <el-input v-model="sealForm.title" placeholder="请输入申请标题" /> 
 | 
        </el-form-item> 
 | 
        <el-form-item label="用印类型" prop="sealType"> 
 | 
          <el-select v-model="sealForm.sealType" placeholder="请选择用印类型" style="width: 100%"> 
 | 
            <el-option label="公章" value="official" /> 
 | 
            <el-option label="合同专用章" value="contract" /> 
 | 
            <el-option label="财务专用章" value="finance" /> 
 | 
            <el-option label="法人章" value="legal" /> 
 | 
          </el-select> 
 | 
        </el-form-item> 
 | 
        <el-form-item label="申请原因" prop="reason"> 
 | 
          <el-input v-model="sealForm.reason" type="textarea" :rows="4" placeholder="请详细说明用印原因" /> 
 | 
        </el-form-item> 
 | 
        <el-form-item label="紧急程度" prop="urgency"> 
 | 
          <el-radio-group v-model="sealForm.urgency"> 
 | 
            <el-radio label="normal">普通</el-radio> 
 | 
            <el-radio label="urgent">紧急</el-radio> 
 | 
            <el-radio label="very-urgent">特急</el-radio> 
 | 
          </el-radio-group> 
 | 
        </el-form-item> 
 | 
      </el-form> 
 | 
      <template #footer> 
 | 
        <span class="dialog-footer"> 
 | 
          <el-button @click="showSealApplyDialog = false">取消</el-button> 
 | 
          <el-button type="primary" @click="submitSealApplication">提交申请</el-button> 
 | 
        </span> 
 | 
      </template> 
 | 
    </el-dialog> 
 | 
  
 | 
    <!-- 规章制度发布对话框 --> 
 | 
    <!-- <el-dialog v-model="showRegulationDialog" :title="operationType === 'add' ? '发布制度' : '编辑制度'" width="800px"> 
 | 
      <el-form :model="regulationForm" :rules="regulationRules" ref="regulationFormRef" label-width="100px"> 
 | 
        <el-form-item label="制度编号" prop="regulationNum"> 
 | 
          <el-input v-model="regulationForm.regulationNum" placeholder="请输入制度编号" /> 
 | 
        </el-form-item> 
 | 
        <el-form-item label="制度标题" prop="title"> 
 | 
          <el-input v-model="regulationForm.title" placeholder="请输入制度标题" /> 
 | 
        </el-form-item> 
 | 
        <el-form-item label="制度分类" prop="category"> 
 | 
          <el-select v-model="regulationForm.category" placeholder="请选择制度分类" style="width: 100%"> 
 | 
            <el-option label="人事制度" value="hr" /> 
 | 
            <el-option label="财务制度" value="finance" /> 
 | 
            <el-option label="安全制度" value="safety" /> 
 | 
            <el-option label="技术制度" value="tech" /> 
 | 
          </el-select> 
 | 
        </el-form-item> 
 | 
        <el-form-item label="制度内容" prop="content"> 
 | 
          <el-input v-model="regulationForm.content" type="textarea" :rows="10" placeholder="请输入制度详细内容" /> 
 | 
        </el-form-item> 
 | 
        <el-form-item label="制度版本" prop="version"> 
 | 
          <el-input v-model="regulationForm.version" placeholder="请输入制度版本" /> 
 | 
        </el-form-item> 
 | 
        <el-form-item label="生效时间" prop="effectiveTime"> 
 | 
          <el-date-picker v-model="regulationForm.effectiveTime" type="datetime" format="YYYY-MM-DD HH:mm:ss" 
 | 
             value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择生效时间" style="width: 100%" /> 
 | 
        </el-form-item> 
 | 
        <el-form-item label="适用范围" prop="scope"> 
 | 
          <el-checkbox-group v-model="regulationForm.scope"> 
 | 
            <el-checkbox label="all">全体员工</el-checkbox> 
 | 
            <el-checkbox label="manager">管理层</el-checkbox> 
 | 
            <el-checkbox label="hr">人事部门</el-checkbox> 
 | 
            <el-checkbox label="finance">财务部门</el-checkbox> 
 | 
            <el-checkbox label="tech">技术部门</el-checkbox> 
 | 
          </el-checkbox-group> 
 | 
        </el-form-item> 
 | 
        <el-form-item label="是否需要确认" prop="requireConfirm"> 
 | 
          <el-switch v-model="regulationForm.requireConfirm" /> 
 | 
          <span class="ml-10">开启后员工需要阅读确认</span> 
 | 
        </el-form-item> 
 | 
      </el-form> 
 | 
      <template #footer> 
 | 
        <span class="dialog-footer"> 
 | 
          <el-button @click="showRegulationDialog = false">取消</el-button> 
 | 
          <el-button type="primary" @click="submitRegulation">发布制度</el-button> 
 | 
        </span> 
 | 
      </template> 
 | 
    </el-dialog> --> 
 | 
  
 | 
    <!-- 用印详情对话框 --> 
 | 
    <el-dialog v-model="showSealDetailDialog" title="用印申请详情" width="700px"> 
 | 
      <div v-if="currentSealDetail" class="mb10"> 
 | 
        <el-descriptions :column="2" border> 
 | 
          <el-descriptions-item label="申请编号">{{ currentSealDetail.id }}</el-descriptions-item> 
 | 
          <el-descriptions-item label="申请标题">{{ currentSealDetail.title }}</el-descriptions-item> 
 | 
          <el-descriptions-item label="申请人">{{ currentSealDetail.createUserName }}</el-descriptions-item> 
 | 
          <el-descriptions-item label="所属部门">{{ currentSealDetail.department }}</el-descriptions-item> 
 | 
          <el-descriptions-item label="用印类型">{{ getSealTypeText(currentSealDetail.sealType) }}</el-descriptions-item> 
 | 
          <el-descriptions-item label="申请时间">{{ currentSealDetail.createTime }}</el-descriptions-item> 
 | 
          <el-descriptions-item label="状态"> 
 | 
            <el-tag :type="getStatusType(currentSealDetail.status)"> 
 | 
              {{ getStatusText(currentSealDetail.status) }} 
 | 
            </el-tag> 
 | 
          </el-descriptions-item> 
 | 
          <el-descriptions-item label="申请原因" :span="2">{{ currentSealDetail.reason }}</el-descriptions-item> 
 | 
        </el-descriptions> 
 | 
      </div> 
 | 
    </el-dialog> 
 | 
  
 | 
    <!-- 规章制度详情对话框 --> 
 | 
    <el-dialog v-model="showRegulationDetailDialog" title="规章制度详情" width="800px"> 
 | 
      <div v-if="currentRegulationDetail"> 
 | 
        <el-descriptions :column="2" border> 
 | 
          <el-descriptions-item label="制度编号">{{ currentRegulationDetail.id }}</el-descriptions-item> 
 | 
          <el-descriptions-item label="制度标题">{{ currentRegulationDetail.title }}</el-descriptions-item> 
 | 
          <el-descriptions-item label="分类">{{ getCategoryText(currentRegulationDetail.category) }}</el-descriptions-item> 
 | 
          <el-descriptions-item label="版本">{{ currentRegulationDetail.version }}</el-descriptions-item> 
 | 
          <el-descriptions-item label="发布人">{{ currentRegulationDetail.createUserName }}</el-descriptions-item> 
 | 
          <el-descriptions-item label="发布时间">{{ currentRegulationDetail.createTime }}</el-descriptions-item> 
 | 
        </el-descriptions> 
 | 
        <div class="mt-20"> 
 | 
          <h4>制度内容</h4> 
 | 
          <div class="regulation-content">{{ currentRegulationDetail.content }}</div> 
 | 
        </div> 
 | 
        <!-- 如果tableData>0 显示 --> 
 | 
        <div style="margin: 10px 0;" v-if="tableData && tableData.length > 0" > 
 | 
          <el-button type="success" @click="resetForm(currentRegulationDetail)">确认查看</el-button> 
 | 
        </div> 
 | 
      </div> 
 | 
    </el-dialog> 
 | 
  
 | 
    <!-- 版本历史对话框 --> 
 | 
    <el-dialog v-model="showVersionHistoryDialog" title="版本历史" width="800px"> 
 | 
      <el-table :data="versionHistory" style="width: 100%;margin-bottom: 10px"> 
 | 
        <el-table-column prop="version" label="版本号" width="100" /> 
 | 
        <el-table-column prop="updateTime" label="更新时间" width="180" /> 
 | 
        <el-table-column prop="createUserName" label="更新人" width="120" /> 
 | 
        <el-table-column prop="changeLog" label="变更说明"> 
 | 
          <template #default="scope"> 
 | 
            <el-tag :type="scope.row.status === 'active' ? 'success' : 'info'"> 
 | 
              {{ scope.row.status === 'active' ? '生效中' : '已废止' }} 
 | 
            </el-tag> 
 | 
          </template> 
 | 
        </el-table-column> 
 | 
      </el-table> 
 | 
    </el-dialog> 
 | 
  
 | 
    <!-- 阅读状态对话框 --> 
 | 
    <el-dialog v-model="showReadStatusDialog" title="阅读状态" width="800px"> 
 | 
      <el-table :data="readStatusList" style="width: 100%;margin-bottom: 10px"> 
 | 
        <el-table-column prop="employee" label="员工姓名" width="120" /> 
 | 
        <el-table-column prop="department" label="所属部门" width="150" /> 
 | 
        <el-table-column prop="createTime" label="阅读时间" width="180" /> 
 | 
        <el-table-column prop="confirmTime" label="确认时间" width="180" /> 
 | 
        <el-table-column prop="status" label="状态" width="100"> 
 | 
          <template #default="scope"> 
 | 
            <el-tag :type="scope.row.status === 'confirmed' ? 'success' : 'warning'"> 
 | 
              {{ scope.row.status === 'confirmed' ? '已确认' : '未确认' }} 
 | 
            </el-tag> 
 | 
          </template> 
 | 
        </el-table-column> 
 | 
      </el-table> 
 | 
    </el-dialog> 
 | 
  </div> 
 | 
</template> 
 | 
  
 | 
<script setup> 
 | 
import { ref, reactive, onMounted } from 'vue' 
 | 
import { ElMessage, ElMessageBox } from 'element-plus' 
 | 
import { Plus } from '@element-plus/icons-vue' 
 | 
import { listSealApplication, addSealApplication, updateSealApplication,listRuleManagement,addRuleManagement,updateRuleManagement,delRuleManagement,getReadingStatusByRuleId,getReadingStatusList,addReadingStatus,updateReadingStatus  } from '@/api/collaborativeApproval/sealManagement.js' 
 | 
import { el } from 'element-plus/es/locales.mjs' 
 | 
import { getUserProfile } from '@/api/system/user.js' 
 | 
import {staffJoinDel, staffJoinListPage} from "@/api/personnelManagement/onboarding.js"; 
 | 
import useUserStore from '@/store/modules/user' 
 | 
import { userLoginFacotryList } from "@/api/system/user.js" 
 | 
  
 | 
// 响应式数据 
 | 
const currentUser = ref(null) 
 | 
const activeTab = ref('seal') 
 | 
const operationType = ref('add') 
 | 
const tableData = ref([]) 
 | 
// 用印申请相关 
 | 
const userStore = useUserStore() 
 | 
const showSealApplyDialog = ref(false) 
 | 
const tableLoading = ref(false) 
 | 
const showSealDetailDialog = ref(false) 
 | 
const currentSealDetail = ref(null) 
 | 
const sealFormRef = ref() 
 | 
const sealForm = reactive({ 
 | 
  applicationNum: '', 
 | 
  title: '', 
 | 
  sealType: '', 
 | 
  reason: '', 
 | 
  urgency: 'normal', 
 | 
  status: 'pending' 
 | 
}) 
 | 
  
 | 
const sealRules = { 
 | 
  applicationNum: [{ required: true, message: '请输入申请编号', trigger: 'blur' }], 
 | 
  title: [{ required: true, message: '请输入申请标题', trigger: 'blur' }], 
 | 
  sealType: [{ required: true, message: '请选择用印类型', trigger: 'change' }], 
 | 
  reason: [{ required: true, message: '请输入申请原因', trigger: 'blur' }] 
 | 
} 
 | 
  
 | 
const sealSearchForm = reactive({ 
 | 
  title: '', 
 | 
  status: '' 
 | 
}) 
 | 
// 分页参数 
 | 
const page = reactive({ 
 | 
  current: 1, 
 | 
  size: 10, 
 | 
  total: 0 
 | 
}) 
 | 
// 规章制度相关 
 | 
const showRegulationDialog = ref(false) 
 | 
const showRegulationDetailDialog = ref(false) 
 | 
const showVersionHistoryDialog = ref(false) 
 | 
const showReadStatusDialog = ref(false) 
 | 
const currentRegulationDetail = ref(null) 
 | 
const regulationFormRef = ref() 
 | 
const regulationForm = reactive({ 
 | 
  id: '', 
 | 
  regulationNum: '', 
 | 
  title: '', 
 | 
  category: '', 
 | 
  content: '', 
 | 
  version: '', 
 | 
  status: 'active', 
 | 
  readCount: 0, 
 | 
  effectiveTime: '', 
 | 
  scope: [], 
 | 
  requireConfirm: false 
 | 
}) 
 | 
  
 | 
const readStatus = ref({ 
 | 
  id: '', 
 | 
  ruleId: '', 
 | 
  employee: '', 
 | 
  department: '', 
 | 
  createTime: '', 
 | 
  confirmTime: '', 
 | 
  status: 'unconfirmed' 
 | 
}) 
 | 
  
 | 
const regulationRules = { 
 | 
  title: [{ required: true, message: '请输入制度标题', trigger: 'blur' }], 
 | 
  category: [{ required: true, message: '请选择制度分类', trigger: 'change' }], 
 | 
  content: [{ required: true, message: '请输入制度内容', trigger: 'blur' }], 
 | 
  effectiveTime: [{ required: true, message: '请选择生效时间', trigger: 'change' }], 
 | 
  scope: [{ required: true, message: '请选择适用范围', trigger: 'change' }] 
 | 
} 
 | 
  
 | 
const regulationSearchForm = reactive({ 
 | 
  title: '', 
 | 
  category: '' 
 | 
}) 
 | 
  
 | 
// 假数据 
 | 
const sealApplications = ref([]) 
 | 
  
 | 
const regulations = ref([]) 
 | 
  
 | 
const versionHistory = ref([]) 
 | 
  
 | 
const readStatusList = ref([]) 
 | 
  // { employee: '陈志强', department: '销售部', readTime: '2025-01-11 10:30:00', confirmTime: '2025-01-11 10:35:00', status: 'confirmed' }, 
 | 
  // { employee: '刘雅婷', department: '技术部', readTime: '2025-01-11 14:20:00', confirmTime: '', status: 'unconfirmed' }, 
 | 
  // { employee: '王建国', department: '财务部', readTime: '2025-01-12 09:15:00', confirmTime: '2025-01-12 09:20:00', status: 'confirmed' } 
 | 
  
 | 
// 用印申请状态 
 | 
const getStatusType = (status) => { 
 | 
  const statusMap = { 
 | 
    pending: 'warning', 
 | 
    approved: 'success', 
 | 
    rejected: 'danger' 
 | 
  } 
 | 
  return statusMap[status] || 'info' 
 | 
} 
 | 
// 制度状态 
 | 
const getStatusText = (status) => { 
 | 
  const statusMap = { 
 | 
    pending: '待审批', 
 | 
    approved: '已通过', 
 | 
    rejected: '已拒绝' 
 | 
  } 
 | 
  return statusMap[status] || '未知' 
 | 
} 
 | 
// 用印类型 
 | 
const getSealTypeText = (sealType) => { 
 | 
  const sealTypeMap = { 
 | 
    official: '公章', 
 | 
    contract: '合同专用章', 
 | 
    finance: '财务专用章', 
 | 
    tegal: '技术专用章' 
 | 
  } 
 | 
  return sealTypeMap[sealType] || '未知' 
 | 
} 
 | 
// 制度分类 
 | 
const getCategoryText = (category) => { 
 | 
  const categoryMap = { 
 | 
    hr: '人事制度', 
 | 
    finance: '财务制度', 
 | 
    safety: '安全制度', 
 | 
    tech: '技术制度' 
 | 
  } 
 | 
  return categoryMap[category] || '未知' 
 | 
} 
 | 
// 搜索印章申请 
 | 
const searchSealApplications = () => { 
 | 
  page.current=1 
 | 
  getSealApplicationList() 
 | 
  
 | 
  // ElMessage.success('搜索完成') 
 | 
} 
 | 
// 重置印章申请搜索 
 | 
const resetSealSearch = () => { 
 | 
  sealSearchForm.title = '' 
 | 
  sealSearchForm.status = '' 
 | 
  searchSealApplications() 
 | 
} 
 | 
// 搜索制度 
 | 
const searchRegulations = () => { 
 | 
  page.current=1 
 | 
  getRegulationList() 
 | 
} 
 | 
// 重置制度搜索 
 | 
const resetRegulationSearch = () => { 
 | 
  regulationSearchForm.title = '' 
 | 
  regulationSearchForm.category = '' 
 | 
  searchRegulations() 
 | 
} 
 | 
// 提交用印申请 
 | 
const submitSealApplication = async () => { 
 | 
  try { 
 | 
    await sealFormRef.value.validate() 
 | 
    addSealApplication(sealForm).then(res => { 
 | 
      if(res.code == 200){ 
 | 
        ElMessage.success('申请提交成功') 
 | 
        showSealApplyDialog.value = false 
 | 
        getSealApplicationList() 
 | 
        Object.assign(sealForm, { 
 | 
        applicationNum: '', 
 | 
        title: '', 
 | 
        sealType: '', 
 | 
        reason: '', 
 | 
        urgency: 'normal', 
 | 
        status: 'pending' 
 | 
      }) 
 | 
      } 
 | 
    }).catch(err => { 
 | 
      ElMessage.error(err.msg) 
 | 
    }) 
 | 
   
 | 
  } catch (error) { 
 | 
    ElMessage.error('请完善申请信息') 
 | 
  } 
 | 
} 
 | 
// 新增 
 | 
const handleAdd = () => { 
 | 
  operationType.value = 'add' 
 | 
  resetRegulationForm() 
 | 
  showRegulationDialog.value = true 
 | 
} 
 | 
  
 | 
// 编辑 
 | 
const handleEdit = (row) => { 
 | 
  operationType.value = 'edit' 
 | 
  Object.assign(regulationForm, row) 
 | 
  showRegulationDialog.value = true 
 | 
} 
 | 
// 废弃 
 | 
const repealEdit = (row) => { 
 | 
  operationType.value = 'edit' 
 | 
  Object.assign(regulationForm, row) 
 | 
  regulationForm.status = 'repealed' 
 | 
  ElMessageBox.confirm('确认废弃该制度?', '提示', { 
 | 
    confirmButtonText: '确定', 
 | 
    cancelButtonText: '取消', 
 | 
    type: 'warning' 
 | 
  }).then(() => { 
 | 
    updateRuleManagement(regulationForm).then(res => { 
 | 
      if(res.code == 200){ 
 | 
        ElMessage.success('制度废弃成功') 
 | 
        // showRegulationDialog.value = false 
 | 
        getRegulationList() 
 | 
        resetRegulationForm() 
 | 
      } 
 | 
    }) 
 | 
  }).catch(() => { 
 | 
    ElMessage({ 
 | 
      type: 'info', 
 | 
      message: '已取消废弃' 
 | 
    }) 
 | 
  }) 
 | 
} 
 | 
// 发布制度 
 | 
const submitRegulation = async () => { 
 | 
  try { 
 | 
    await regulationFormRef.value.validate() 
 | 
    if(operationType.value == 'add'){ 
 | 
      addRuleManagement(regulationForm).then(res => { 
 | 
        if(res.code == 200){ 
 | 
          ElMessage.success('制度发布成功') 
 | 
          showRegulationDialog.value = false 
 | 
          getRegulationList() 
 | 
          resetRegulationForm() 
 | 
        } 
 | 
      }) 
 | 
    }else{ 
 | 
      updateRuleManagement(regulationForm).then(res => { 
 | 
        if(res.code == 200){ 
 | 
          ElMessage.success('制度编辑成功') 
 | 
          showRegulationDialog.value = false 
 | 
          resetRegulationForm() 
 | 
          getRegulationList() 
 | 
      }})} 
 | 
  }catch(err){ 
 | 
    ElMessage.error(err.msg) 
 | 
  } 
 | 
}  
 | 
//重置制度表单 
 | 
const resetRegulationForm = () => { 
 | 
  Object.assign(regulationForm, { 
 | 
    id: '', 
 | 
    regulationNum: '', 
 | 
    title: '', 
 | 
    category: '', 
 | 
    content: '', 
 | 
    version: '', 
 | 
    status: 'active', 
 | 
    readCount: 0, 
 | 
    effectiveTime: '', 
 | 
    scope: [], 
 | 
    requireConfirm: false 
 | 
}) 
 | 
} 
 | 
  
 | 
  
 | 
// 查看用印申请详情 
 | 
const viewSealDetail = (row) => { 
 | 
  currentSealDetail.value = row 
 | 
  showSealDetailDialog.value = true 
 | 
} 
 | 
// 审批用印申请 
 | 
const approveSeal = (row) => { 
 | 
  console.log(row) 
 | 
  ElMessageBox.confirm('确认通过该用印申请?', '提示', { 
 | 
    confirmButtonText: '确定', 
 | 
    cancelButtonText: '取消', 
 | 
    type: 'warning' 
 | 
  }).then(() => { 
 | 
    row.status = 'approved' 
 | 
    updateSealApplication(row).then(res => { 
 | 
      if(res.code == 200){ 
 | 
        ElMessage.success('审批通过') 
 | 
      } 
 | 
    }) 
 | 
  }) 
 | 
} 
 | 
// 拒绝用印申请 
 | 
const rejectSeal = (row) => { 
 | 
  ElMessageBox.prompt('请输入拒绝原因', '提示', { 
 | 
    confirmButtonText: '确定', 
 | 
    cancelButtonText: '取消', 
 | 
    inputPattern: /\S+/, 
 | 
    inputErrorMessage: '拒绝原因不能为空' 
 | 
  }).then(({ value }) => { 
 | 
    row.status = 'rejected' 
 | 
    updateSealApplication(row).then(res => { 
 | 
      if(res.code == 200){ 
 | 
        ElMessage.success('审批拒绝') 
 | 
      } 
 | 
    }) 
 | 
    ElMessage.success('已拒绝申请') 
 | 
  }) 
 | 
} 
 | 
// 获取在职员工列表 
 | 
const getList = () => { 
 | 
  tableLoading.value = true; 
 | 
      //获取当前登录用户信息 
 | 
  getUserProfile().then(res => { 
 | 
    if(res.code == 200){ 
 | 
      console.log(res.data.userName) 
 | 
      currentUser.value = res.data.userName 
 | 
    } 
 | 
  }) 
 | 
  staffJoinListPage({staffState: 1}).then(res => { 
 | 
    tableLoading.value = false; 
 | 
    // tableData.value = res.data.records 
 | 
    // //筛选出和currentUser同名的人员 
 | 
    tableData.value = res.data.records.filter(item => item.staffName === currentUser.value) 
 | 
    console.log("tableData",tableData.value)  
 | 
    page.total = res.data.total; 
 | 
       
 | 
    if(tableData.value.length == 0){ 
 | 
    ElMessage.error('当前用户未加入任何部门') 
 | 
    } 
 | 
  }).catch(err => { 
 | 
    tableLoading.value = false; 
 | 
  }) 
 | 
  
 | 
  
 | 
}; 
 | 
  
 | 
// 查看制度版本历史 
 | 
const viewVersionHistory = (row) => { 
 | 
  showVersionHistoryDialog.value = true 
 | 
  const params = { 
 | 
  
 | 
    category: row.category 
 | 
  } 
 | 
  listRuleManagement(page,params).then(res => { 
 | 
    if(res.code == 200){ 
 | 
      versionHistory.value = res.data.records 
 | 
    } 
 | 
  }) 
 | 
} 
 | 
// 查看制度详情 
 | 
const viewRegulation = (row) => { 
 | 
  getList() 
 | 
  currentRegulationDetail.value = row 
 | 
  showRegulationDetailDialog.value = true 
 | 
  getReadingStatusByRuleId(row.id).then(res => { 
 | 
    if(res.code == 200){ 
 | 
      readStatusList.value = res.data 
 | 
      if(readStatusList.value.length==0 && tableData.value.length>0){ 
 | 
          const params = { 
 | 
          ruleId: row.id, 
 | 
          employee: tableData.value[0].staffName, 
 | 
          department: tableData.value[0].postJob, 
 | 
          status: 'unconfirmed' 
 | 
        } 
 | 
        addReadingStatus(params).then(res => { 
 | 
          if(res.code == 200){ 
 | 
            ElMessage.success('制度阅读成功') 
 | 
          } 
 | 
        }) 
 | 
      } 
 | 
    } 
 | 
  }) 
 | 
   
 | 
} 
 | 
// 查看制度阅读状态 
 | 
const viewReadStatus = (row) => { 
 | 
  showReadStatusDialog.value = true 
 | 
  //查看阅读状态列表 
 | 
  getReadingStatusByRuleId(row.id).then(res => { 
 | 
    if(res.code == 200){ 
 | 
      readStatusList.value = res.data 
 | 
    } 
 | 
  }) 
 | 
} 
 | 
  
 | 
//确认查看 
 | 
const resetForm = (row) => { 
 | 
  console.log("row",row) 
 | 
  row.readCount = row.readCount + 1 
 | 
   
 | 
  updateRuleManagement(row).then(res => { 
 | 
    if(res.code == 200){ 
 | 
      ElMessage.success('查看数量修改成功') 
 | 
      //修改阅读状态 
 | 
      //根据制度id和当前登录的员工得到阅读状态 
 | 
      // let item = readStatusList.value.filter(item => item.employee == tableData.value[0].staffName ) 
 | 
      // if(item.length>0){ 
 | 
      //   item[0].status = 'confirmed', 
 | 
      //   item[0].confirmTime = new Date().toISOString().replace('T', ' ').split('.')[0]; 
 | 
      // } 
 | 
      // 筛选当前员工对应该制度的阅读状态记录 
 | 
      let statusItem = readStatusList.value.find(item => item.employee === tableData.value[0].staffName && item.ruleId === row.id); 
 | 
  
 | 
      if (statusItem) { 
 | 
        // 如果找到记录,更新状态和确认时间 
 | 
        statusItem.status = 'confirmed'; 
 | 
        // 格式化时间为"YYYY-MM-DD HH:mm:ss"格式 
 | 
        const now = new Date(); 
 | 
        statusItem.confirmTime = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}-${String(now.getDate()).padStart(2, '0')} ${String(now.getHours()).padStart(2, '0')}:${String(now.getMinutes()).padStart(2, '0')}:${String(now.getSeconds()).padStart(2, '0')}`; 
 | 
        // statusItem.confirmTime = new Date().toISOString().replace('T', ' ').split('.')[0]; 
 | 
         
 | 
        updateReadingStatus(statusItem).then(res => { 
 | 
          if(res.code == 200){ 
 | 
            ElMessage.success('制度阅读状态修改成功') 
 | 
          } 
 | 
        }) 
 | 
      } 
 | 
  
 | 
    } 
 | 
  }) 
 | 
} 
 | 
  
 | 
// 获取印章申请列表数据 
 | 
const getSealApplicationList = async () => { 
 | 
  tableLoading.value = true 
 | 
  listSealApplication(page,sealSearchForm) 
 | 
  .then(res => { 
 | 
    //获取当前登录的部门信息 
 | 
// 获取当前登录的部门信息并过滤数据 
 | 
    const currentFactoryName = userStore.currentFactoryName 
 | 
    if (currentFactoryName) { 
 | 
      // 根据currentFactoryName过滤出department相同的数据 
 | 
      sealApplications.value = res.data.records.filter(item => item.department === currentFactoryName) 
 | 
      // 更新过滤后的总数 
 | 
      page.value.total = sealApplications.value.length 
 | 
    } else { 
 | 
      // 如果没有currentFactoryName,则显示所有数据 
 | 
      sealApplications.value = res.data.records 
 | 
      page.value.total = res.data.total 
 | 
    } 
 | 
    // sealApplications.value = res.data.records 
 | 
    // page.value.total = res.data.total; 
 | 
    tableLoading.value = false; 
 | 
  
 | 
  }).catch(err => { 
 | 
    tableLoading.value = false; 
 | 
  }) 
 | 
} 
 | 
// 获取规章制度列表数据 
 | 
const getRegulationList = async () => { 
 | 
  tableLoading.value = true 
 | 
  listRuleManagement(page,regulationSearchForm) 
 | 
  .then(res => { 
 | 
  
 | 
    regulations.value = res.data.records 
 | 
    // 过滤掉已废弃的制度 
 | 
    // regulations.value = res.data.records.filter(item => item.status !== 'repealed') 
 | 
    page.value.total = res.data.total; 
 | 
    tableLoading.value = false; 
 | 
  
 | 
  }).catch(err => { 
 | 
    tableLoading.value = false; 
 | 
  }) 
 | 
} 
 | 
  
 | 
onMounted(() => { 
 | 
  // 初始化 
 | 
  getSealApplicationList() 
 | 
  getRegulationList() 
 | 
}) 
 | 
</script> 
 | 
  
 | 
<style scoped> 
 | 
.app-container { 
 | 
  padding: 20px; 
 | 
} 
 | 
  
 | 
.card-header { 
 | 
  display: flex; 
 | 
  justify-content: space-between; 
 | 
  align-items: center; 
 | 
} 
 | 
  
 | 
.tab-content { 
 | 
  padding: 20px 0; 
 | 
} 
 | 
  
 | 
.mb-20 { 
 | 
  margin-bottom: 20px; 
 | 
} 
 | 
  
 | 
.mt-20 { 
 | 
  margin-top: 20px; 
 | 
} 
 | 
  
 | 
.ml-10 { 
 | 
  margin-left: 10px; 
 | 
} 
 | 
  
 | 
.regulation-content { 
 | 
  background-color: #f5f5f5; 
 | 
  padding: 15px; 
 | 
  border-radius: 4px; 
 | 
  line-height: 1.6; 
 | 
  white-space: pre-wrap; 
 | 
  height: 200px; 
 | 
} 
 | 
  
 | 
.dialog-footer { 
 | 
  display: flex; 
 | 
  justify-content: flex-end; 
 | 
  gap: 10px; 
 | 
} 
 | 
</style> 
 |