gaoluyang
6 天以前 71a9eef518f2f2f1a1eb2fb90f2eb8ab7b155bc8
src/views/collaborativeApproval/sealManagement/index.vue
@@ -6,98 +6,145 @@
          <span>用印管理发布</span>
        </div>
      </template>
   <!-- 用印申请管理 -->
        <div class="tab-content">
            <el-row :gutter="20" class="mb-20 ">
        <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-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 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 type="primary"
                       @click="searchSealApplications">搜索</el-button>
                <el-button @click="resetSealSearch">重置</el-button>
                <el-button @click="handleExport">导出</el-button>
                <el-button type="primary" @click="showSealApplyDialog = true">申请用印
            <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">
        <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">
          <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">
          <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'"
              <el-button link
                         @click="viewSealDetail(scope.row)">查看</el-button>
              <el-button v-if="scope.row.status === 'pending'"
                              link
                    type="primary" 
                    @click="approveSeal(scope.row)"
                  >
                         @click="approveSeal(scope.row)">
                    审批
                  </el-button>
                  <el-button
                    v-if="scope.row.status === 'pending'"
              <el-button v-if="scope.row.status === 'pending'"
                              link
                    type="danger" 
                    @click="rejectSeal(scope.row)"
                  >
                         @click="rejectSeal(scope.row)">
                    拒绝
                  </el-button>
                </template>
              </el-table-column>
            </el-table>
               <pagination v-show="total > 0" :total="total" layout="total, sizes, prev, pager, next, jumper"
                                 :page="page.current" :limit="page.size" @pagination="paginationChange" />
        <pagination v-show="total > 0"
                    :total="total"
                    layout="total, sizes, prev, pager, next, jumper"
                    :page="page.current"
                    :limit="page.size"
                    @pagination="paginationChange" />
        </div> 
    </el-card>
    <!-- 用印申请对话框 -->
    <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-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 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-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 label="申请原因"
                      prop="reason">
          <el-input v-model="sealForm.reason"
                    type="textarea"
                    :rows="4"
                    placeholder="请详细说明用印原因" />
        </el-form-item>
        <el-form-item label="紧急程度" prop="urgency">
        <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>
@@ -107,12 +154,12 @@
      </el-form>
      <template #footer>
        <span class="dialog-footer">
          <el-button type="primary"
                     @click="submitSealApplication">提交申请</el-button>
          <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">
@@ -161,11 +208,14 @@
        </span>
      </template>
    </el-dialog> -->
    <!-- 用印详情对话框 -->
    <el-dialog v-model="showSealDetailDialog" title="用印申请详情" width="700px">
      <div v-if="currentSealDetail" class="mb10">
        <el-descriptions :column="2" border>
    <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>
@@ -177,15 +227,18 @@
              {{ getStatusText(currentSealDetail.status) }}
            </el-tag>
          </el-descriptions-item>
          <el-descriptions-item label="申请原因" :span="2">{{ currentSealDetail.reason }}</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">
    <el-dialog v-model="showRegulationDetailDialog"
               title="规章制度详情"
               width="800px">
      <div v-if="currentRegulationDetail">
        <el-descriptions :column="2" border>
        <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>
@@ -198,19 +251,30 @@
          <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 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="变更说明">
    <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' ? '生效中' : '已废止' }}
@@ -219,15 +283,27 @@
        </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">
    <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' ? '已确认' : '未确认' }}
@@ -240,401 +316,424 @@
</template>
<script setup>
import { ref, reactive, onMounted, getCurrentInstance } 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"
  import { ref, reactive, onMounted, getCurrentInstance } 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 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 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'
})
    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' }]
}
    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: ''
})
    title: "",
    status: "",
  });
// 分页参数
const page = reactive({
  current: 1,
  size: 100,
  total: 0
})
    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 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',
    id: "",
    regulationNum: "",
    title: "",
    category: "",
    content: "",
    version: "",
    status: "active",
  readCount: 0,
  effectiveTime: '',
    effectiveTime: "",
  scope: [],
  requireConfirm: false
})
    requireConfirm: false,
  });
const readStatus = ref({
  id: '',
  ruleId: '',
  employee: '',
  department: '',
  createTime: '',
  confirmTime: '',
  status: 'unconfirmed'
})
    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' }]
}
    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: ''
})
    title: "",
    category: "",
  });
// 假数据
const sealApplications = ref([])
  const sealApplications = ref([]);
const regulations = ref([])
  const regulations = ref([]);
const versionHistory = ref([])
  const versionHistory = ref([]);
const readStatusList = 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 getStatusType = status => {
  const statusMap = {
    pending: 'warning',
    approved: 'success',
    rejected: 'danger'
  }
  return statusMap[status] || 'info'
}
      pending: "warning",
      approved: "success",
      rejected: "danger",
    };
    return statusMap[status] || "info";
  };
// 制度状态
const getStatusText = (status) => {
  const getStatusText = status => {
  const statusMap = {
    pending: '待审批',
    approved: '已通过',
    rejected: '已拒绝'
  }
  return statusMap[status] || '未知'
}
      pending: "待审批",
      approved: "已通过",
      rejected: "已拒绝",
    };
    return statusMap[status] || "未知";
  };
// 用印类型
const getSealTypeText = (sealType) => {
  const getSealTypeText = sealType => {
  const sealTypeMap = {
    official: '公章',
    contract: '合同专用章',
    finance: '财务专用章',
    tegal: '技术专用章'
  }
  return sealTypeMap[sealType] || '未知'
}
      official: "公章",
      contract: "合同专用章",
      finance: "财务专用章",
      tegal: "技术专用章",
    };
    return sealTypeMap[sealType] || "未知";
  };
// 制度分类
const getCategoryText = (category) => {
  const getCategoryText = category => {
  const categoryMap = {
    hr: '人事制度',
    finance: '财务制度',
    safety: '安全制度',
    tech: '技术制度'
  }
  return categoryMap[category] || '未知'
}
      hr: "人事制度",
      finance: "财务制度",
      safety: "安全制度",
      tech: "技术制度",
    };
    return categoryMap[category] || "未知";
  };
// 搜索印章申请
const searchSealApplications = () => {
  page.current=1
  getSealApplicationList()
    page.current = 1;
    getSealApplicationList();
  // ElMessage.success('搜索完成')
}
  };
// 重置印章申请搜索
const resetSealSearch = () => {
  sealSearchForm.title = ''
  sealSearchForm.status = ''
  searchSealApplications()
}
    sealSearchForm.title = "";
    sealSearchForm.status = "";
    searchSealApplications();
  };
// 搜索制度
const searchRegulations = () => {
  page.current=1
  getRegulationList()
}
    page.current = 1;
    getRegulationList();
  };
// 重置制度搜索
const resetRegulationSearch = () => {
  regulationSearchForm.title = ''
  regulationSearchForm.category = ''
  searchRegulations()
}
    regulationSearchForm.title = "";
    regulationSearchForm.category = "";
    searchRegulations();
  };
// 提交用印申请
const submitSealApplication = async () => {
  try {
    await sealFormRef.value.validate()
    addSealApplication(sealForm).then(res => {
      await sealFormRef.value.validate();
      addSealApplication(sealForm)
        .then(res => {
      if(res.code == 200){
        ElMessage.success('申请提交成功')
        showSealApplyDialog.value = false
        getSealApplicationList()
            ElMessage.success("申请提交成功");
            showSealApplyDialog.value = false;
            getSealApplicationList();
        Object.assign(sealForm, {
        applicationNum: '',
        title: '',
        sealType: '',
        reason: '',
        urgency: 'normal',
        status: 'pending'
      })
              applicationNum: "",
              title: "",
              sealType: "",
              reason: "",
              urgency: "normal",
              status: "pending",
            });
      }
    }).catch(err => {
      ElMessage.error(err.msg)
    })
        .catch(err => {
          ElMessage.error(err.msg);
        });
  } catch (error) {
    ElMessage.error('请完善申请信息')
      ElMessage.error("请完善申请信息");
  }
}
  };
// 新增
const handleAdd = () => {
  operationType.value = 'add'
  resetRegulationForm()
  showRegulationDialog.value = true
}
    operationType.value = "add";
    resetRegulationForm();
    showRegulationDialog.value = true;
  };
// 编辑
const handleEdit = (row) => {
  operationType.value = 'edit'
  Object.assign(regulationForm, row)
  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(() => {
  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('制度废弃成功')
            ElMessage.success("制度废弃成功");
        // showRegulationDialog.value = false
        getRegulationList()
        resetRegulationForm()
            getRegulationList();
            resetRegulationForm();
      }
        });
    })
  }).catch(() => {
      .catch(() => {
    ElMessage({
      type: 'info',
      message: '已取消废弃'
    })
  })
}
          type: "info",
          message: "已取消废弃",
        });
      });
  };
// 发布制度
const submitRegulation = async () => {
  try {
    await regulationFormRef.value.validate()
    if(operationType.value == 'add'){
      await regulationFormRef.value.validate();
      if (operationType.value == "add") {
      addRuleManagement(regulationForm).then(res => {
        if(res.code == 200){
          ElMessage.success('制度发布成功')
          showRegulationDialog.value = false
          getRegulationList()
          resetRegulationForm()
            ElMessage.success("制度发布成功");
            showRegulationDialog.value = false;
            getRegulationList();
            resetRegulationForm();
        }
      })
        });
    }else{
      updateRuleManagement(regulationForm).then(res => {
        if(res.code == 200){
          ElMessage.success('制度编辑成功')
          showRegulationDialog.value = false
          resetRegulationForm()
          getRegulationList()
      }})}
            ElMessage.success("制度编辑成功");
            showRegulationDialog.value = false;
            resetRegulationForm();
            getRegulationList();
          }
        });
      }
  }catch(err){
    ElMessage.error(err.msg)
      ElMessage.error(err.msg);
  }
}
  };
//重置制度表单
const resetRegulationForm = () => {
  Object.assign(regulationForm, {
    id: '',
    regulationNum: '',
    title: '',
    category: '',
    content: '',
    version: '',
    status: 'active',
      id: "",
      regulationNum: "",
      title: "",
      category: "",
      content: "",
      version: "",
      status: "active",
    readCount: 0,
    effectiveTime: '',
      effectiveTime: "",
    scope: [],
    requireConfirm: false
})
}
      requireConfirm: false,
    });
  };
// 查看用印申请详情
const viewSealDetail = (row) => {
  currentSealDetail.value = row
  showSealDetailDialog.value = true
}
  const viewSealDetail = row => {
    currentSealDetail.value = row;
    showSealDetailDialog.value = true;
  };
// 审批用印申请
const approveSeal = (row) => {
  console.log(row)
  ElMessageBox.confirm('确认通过该用印申请?', '提示', {
    confirmButtonText: '确定',
    cancelButtonText: '取消',
    type: 'warning'
  const approveSeal = row => {
    console.log(row);
    ElMessageBox.confirm("确认通过该用印申请?", "提示", {
      confirmButtonText: "确定",
      cancelButtonText: "取消",
      type: "warning",
  }).then(() => {
    row.status = 'approved'
      row.status = "approved";
    updateSealApplication(row).then(res => {
      if(res.code == 200){
        ElMessage.success('审批通过')
          ElMessage.success("审批通过");
      }
    })
  })
}
      });
    });
  };
// 拒绝用印申请
const rejectSeal = (row) => {
  ElMessageBox.prompt('请输入拒绝原因', '提示', {
    confirmButtonText: '确定',
    cancelButtonText: '取消',
  const rejectSeal = row => {
    ElMessageBox.prompt("请输入拒绝原因", "提示", {
      confirmButtonText: "确定",
      cancelButtonText: "取消",
    inputPattern: /\S+/,
    inputErrorMessage: '拒绝原因不能为空'
      inputErrorMessage: "拒绝原因不能为空",
  }).then(({ value }) => {
    row.status = 'rejected'
      row.status = "rejected";
    updateSealApplication(row).then(res => {
      if(res.code == 200){
        ElMessage.success('审批拒绝')
          ElMessage.success("审批拒绝");
      }
    })
    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
        console.log(res.data.userName);
        currentUser.value = res.data.userName;
    }
  })
  staffJoinListPage({staffState: 1, ...page}).then(res => {
    });
    staffJoinListPage({ staffState: 1, ...page })
      .then(res => {
    tableLoading.value = false;
    // tableData.value = res.data.records
    // //筛选出和currentUser同名的人员
    tableData.value = res.data.records.filter(item => item.staffName === currentUser.value)
        tableData.value = res.data.records.filter(
          item => item.staffName === currentUser.value
        );
    page.total = res.data.total;
      
    if(tableData.value.length == 0){
    ElMessage.error('当前用户未加入任何部门')
          ElMessage.error("当前用户未加入任何部门");
    }
  }).catch(err => {
    tableLoading.value = false;
  })
      .catch(err => {
        tableLoading.value = false;
      });
};
// 查看制度版本历史
const viewVersionHistory = (row) => {
  showVersionHistoryDialog.value = true
  const viewVersionHistory = row => {
    showVersionHistoryDialog.value = true;
  const params = {
    category: row.category
  }
      category: row.category,
    };
  listRuleManagement(page,params).then(res => {
    if(res.code == 200){
      versionHistory.value = res.data.records
        versionHistory.value = res.data.records;
    }
  })
}
    });
  };
// 查看制度详情
const viewRegulation = (row) => {
  getList()
  currentRegulationDetail.value = row
  showRegulationDetailDialog.value = true
  const viewRegulation = row => {
    getList();
    currentRegulationDetail.value = row;
    showRegulationDetailDialog.value = true;
  getReadingStatusByRuleId(row.id).then(res => {
    if(res.code == 200){
      readStatusList.value = res.data
        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'
        }
            status: "unconfirmed",
          };
        addReadingStatus(params).then(res => {
          if(res.code == 200){
            ElMessage.success('制度阅读成功')
              ElMessage.success("制度阅读成功");
          }
        })
          });
      }
    }
  })
}
    });
  };
// 查看制度阅读状态
const viewReadStatus = (row) => {
  showReadStatusDialog.value = true
  const viewReadStatus = row => {
    showReadStatusDialog.value = true;
  //查看阅读状态列表
  getReadingStatusByRuleId(row.id).then(res => {
    if(res.code == 200){
      readStatusList.value = res.data
        readStatusList.value = res.data;
    }
  })
}
    });
  };
//确认查看
const resetForm = (row) => {
  console.log("row",row)
  row.readCount = row.readCount + 1
  const resetForm = row => {
    console.log("row", row);
    row.readCount = row.readCount + 1;
  
  updateRuleManagement(row).then(res => {
    if(res.code == 200){
      ElMessage.success('查看数量修改成功')
        ElMessage.success("查看数量修改成功");
      //修改阅读状态
      //根据制度id和当前登录的员工得到阅读状态
      // let item = readStatusList.value.filter(item => item.employee == tableData.value[0].staffName )
@@ -643,81 +742,96 @@
      //   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);
        let statusItem = readStatusList.value.find(
          item =>
            item.employee === tableData.value[0].staffName &&
            item.ruleId === row.id
        );
      if (statusItem) {
        // 如果找到记录,更新状态和确认时间
        statusItem.status = 'confirmed';
          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 = `${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('制度阅读状态修改成功')
              ElMessage.success("制度阅读状态修改成功");
          }
        })
          });
      }
    }
  })
}
    });
  };
// 导出用印申请
const { proxy } = getCurrentInstance()
  const { proxy } = getCurrentInstance();
const handleExport = () => {
  proxy.download('/sealApplicationManagement/export', { ...sealSearchForm }, '用印申请.xlsx')
}
    proxy.download(
      "/sealApplicationManagement/export",
      { ...sealSearchForm },
      "用印申请.xlsx"
    );
  };
// 获取印章申请列表数据
const getSealApplicationList = async () => {
  tableLoading.value = true
    tableLoading.value = true;
  listSealApplication(page,sealSearchForm)
  .then(res => {
    //获取当前登录的部门信息
// 获取当前登录的部门信息并过滤数据
    const currentFactoryName = userStore.currentFactoryName
        const currentFactoryName = userStore.currentFactoryName;
    if (currentFactoryName) {
      // 根据currentFactoryName过滤出department相同的数据
      sealApplications.value = res.data.records.filter(item => item.department === currentFactoryName)
          sealApplications.value = res.data.records.filter(
            item => item.department === currentFactoryName
          );
      // 更新过滤后的总数
      page.total = sealApplications.value.length
          page.total = sealApplications.value.length;
    } else {
      // 如果没有currentFactoryName,则显示所有数据
      sealApplications.value = res.data.records
      page.total = res.data.total
          sealApplications.value = res.data.records;
          page.total = res.data.total;
    }
    // sealApplications.value = res.data.records
    // page.value.total = res.data.total;
    tableLoading.value = false;
  }).catch(err => {
    tableLoading.value = false;
  })
}
      .catch(err => {
        tableLoading.value = false;
      });
  };
// 获取规章制度列表数据
const getRegulationList = async () => {
  tableLoading.value = true
    tableLoading.value = true;
  listRuleManagement(page,regulationSearchForm)
  .then(res => {
    regulations.value = res.data.records
        regulations.value = res.data.records;
    // 过滤掉已废弃的制度
    // regulations.value = res.data.records.filter(item => item.status !== 'repealed')
    page.total = res.data.total;
    tableLoading.value = false;
  }).catch(err => {
    tableLoading.value = false;
  })
}
      .catch(err => {
        tableLoading.value = false;
      });
  };
onMounted(() => {
  // 初始化
  getSealApplicationList()
  getRegulationList()
})
    getSealApplicationList();
    getRegulationList();
  });
</script>
<style scoped>