From 346ffdf4c528ecfa8471a13cdb6f3740a29262e8 Mon Sep 17 00:00:00 2001
From: zhouwx <1175765986@qq.com>
Date: 星期一, 08 十二月 2025 10:37:28 +0800
Subject: [PATCH] 修改
---
src/views/build/conpanyFunctionConsult/Decree/qualityManuals/components/editDialog.vue | 241 +++++++
src/views/build/conpanyFunctionConsult/Decree/qualityPolicys/index.vue | 213 ++++++
src/views/system/clauseManage/index.vue | 2
src/views/build/conpanyFunctionConsult/Decree/qualityObjects/components/editDialog.vue | 241 +++++++
src/views/build/conpanyFunctionConsult/Decree/appointmentBook/index.vue | 213 ++++++
src/views/build/conpanyFunctionConsult/Decree/qualityManuals/index.vue | 213 ++++++
src/api/decree/index.js | 32 +
src/views/build/conpanyFunctionConsult/Decree/qualityObjects/index.vue | 213 ++++++
src/views/build/conpanyFunctionConsult/Decree/qualityPolicys/components/editDialog.vue | 241 +++++++
src/views/build/conpanyFunctionConsult/Decree/appointmentBook/components/editDialog.vue | 241 +++++++
10 files changed, 1,849 insertions(+), 1 deletions(-)
diff --git a/src/api/decree/index.js b/src/api/decree/index.js
new file mode 100644
index 0000000..3b92ce0
--- /dev/null
+++ b/src/api/decree/index.js
@@ -0,0 +1,32 @@
+import request from "@/utils/request";
+
+export function getDecree(params) {
+ return request({
+ url: '/proclaim/list',
+ method: 'get',
+ params: params
+ })
+}
+
+export function addDecree(data) {
+ return request({
+ url: '/proclaim/policy/insert',
+ method: 'post',
+ data: data
+ })
+}
+
+export function editDecree(params) {
+ return request({
+ url: `/proclaim/policy/update`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function delDecree(data) {
+ return request({
+ url: `/proclaim/policy/deleted?proclaimId=${data}`,
+ method: 'get'
+ })
+}
diff --git a/src/views/build/conpanyFunctionConsult/Decree/appointmentBook/components/editDialog.vue b/src/views/build/conpanyFunctionConsult/Decree/appointmentBook/components/editDialog.vue
new file mode 100644
index 0000000..76e08d1
--- /dev/null
+++ b/src/views/build/conpanyFunctionConsult/Decree/appointmentBook/components/editDialog.vue
@@ -0,0 +1,241 @@
+<template>
+ <div class="notice">
+ <el-dialog
+ v-model="dialogVisible"
+ :title="title"
+ width="800px"
+ :before-close="handleClose"
+ >
+ <el-form :model="state.noticeForm" size="default" ref="noticeRef" :rules="title === '新增' || title === '编辑' ? state.formRules : {}" label-width="150px" >
+ <el-form-item label="单位名称:" prop="companyId" v-if="state.isAdmin">
+ <el-select v-model="state.noticeForm.companyId" placeholder="请选择" @change="changeCom" filterable clearable style="width: 100%" :disabled="title == '查看' || title == '编辑' || !state.isAdmin">
+ <el-option
+ v-for="item in state.companyList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.id">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="管理者代表授权书:" v-if="showEditor" required>
+ <t-editor style="width: 800px" ref="myEditor" :toolbar="toolbar" :value="state.noticeForm.content" ></t-editor>
+ </el-form-item>
+ <el-form-item label="管理者代表授权书:" v-else>
+ <div class="ql-container ql-snow" style="height: 500px;width: 100%;margin-top: 10px;" >
+ <div class="ql-editor">
+ <div class="reviewTable" v-html="state.noticeForm.content" ></div>
+ </div>
+ </div>
+ </el-form-item>
+ <el-form-item label="批准人:" prop="checkId">
+ <el-select clearable v-model="state.noticeForm.checkId" :disabled="title =='查看'" filterable placeholder="批准人" style="width: 100%">
+ <el-option
+ v-for="item in state.userList"
+ :key="item.userId"
+ :label="item.name"
+ :value="item.userId"
+ />
+ </el-select>
+ </el-form-item>
+ </el-form>
+ <template #footer v-if="!isReview">
+ <span class="dialog-footer">
+ <el-button @click="handleClose" size="default">取 消</el-button>
+ <el-button type="primary" @click="onSubmit" size="default" v-preReClick>确认</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+<script setup>
+import {nextTick, onMounted, reactive, ref, toRefs, watch} from 'vue'
+import WeEditor from "@/components/WeEditor/index.vue";
+import TEditor from "@/components/Tinymce/Tinymce.vue"
+import {ElMessage} from "element-plus";
+import Cookies from "js-cookie";
+import {getEmployeeRecords} from "@/api/onlineEducation/user";
+import {addDecree, editDecree} from "@/api/decree";
+
+
+const emit = defineEmits(["getList"]);
+
+const dialogVisible = ref(false);
+const toolbar = ref('fontsizeselect | undo redo')
+const title = ref("");
+const noticeRef = ref();
+const fileList = ref([]);
+const myEditor = ref();
+const isReview = ref(false);
+const showEditor = ref(true);
+const state = reactive({
+ noticeForm: {
+ id: '',
+ content: '',
+ companyId:null,
+ checkId:null,
+ type:4,
+ companyName: ''
+ },
+ formRules:{
+ companyId: [{ required: true, message: '请选择企业', trigger: 'blur' }],
+ content: [{ required: true, message: '请输入管理者代表授权书', trigger: 'blur' }],
+ checkId: [{ required: true, message: '请选择批准人', trigger: 'blur' }],
+ },
+ isAdmin: false,
+ companyList: [],
+ userList:[]
+
+})
+
+onMounted(() => {
+
+});
+const openDialog = async (type, value,companyList) => {
+ const userInfo = JSON.parse(Cookies.get('userInfo'))
+ state.isAdmin = userInfo.userType === 0;
+ if(state.isAdmin){
+ state.companyList = companyList
+ state.noticeForm.companyId = null
+ }else {
+ state.noticeForm.companyId = userInfo.companyId
+ }
+ isReview.value = false;
+ showEditor.value = false
+ title.value = type === 'add' ? '新增' : type ==='edit' ? '编辑' : '查看' ;
+ if(type === 'edit' || type === 'review') {
+ Object.keys(state.noticeForm).forEach(key => {
+ if (key in value) {
+ state.noticeForm[key] = value[key]
+ }
+ })
+ }
+ if(type === 'review') {
+ showEditor.value = false
+ isReview.value = true;
+ }
+ if(type === 'edit' || type === 'add') {
+ showEditor.value = true;
+ isReview.value = false;
+ }
+ await getUserList()
+ dialogVisible.value = true;
+}
+
+const onSubmit = async () => {
+ state.noticeForm.content = tinyMCE.activeEditor.getContent();
+ if(!state.isAdmin){
+ const userInfo = JSON.parse(Cookies.get('userInfo'))
+ state.noticeForm.companyId = userInfo.companyId
+ }
+ const valid = await noticeRef.value.validate();
+ if(valid){
+ if(title.value === '新增'){
+ const {id,...data} = JSON.parse(JSON.stringify(state.noticeForm))
+ const res = await addDecree(data)
+ if(res.code === 200){
+ ElMessage({
+ type: 'success',
+ message: '新增成功'
+ });
+ }else{
+ ElMessage.warning(res.message)
+ }
+ emit("getList")
+ reset();
+ showEditor.value=false
+ myEditor.value.clear();
+ noticeRef.value.clearValidate();
+ dialogVisible.value = false;
+ }else if(title.value === '编辑') {
+ const {...data} = JSON.parse(JSON.stringify(state.noticeForm))
+ const res = await editDecree(data)
+ if(res.code === 200){
+ ElMessage({
+ type: 'success',
+ message: '编辑成功'
+ });
+ }else{
+ ElMessage.warning(res.message)
+ }
+ emit("getList")
+ reset();
+ showEditor.value=false
+ myEditor.value.clear();
+ noticeRef.value.clearValidate();
+ dialogVisible.value = false;
+ }
+ }
+}
+const getUserList = async ()=> {
+ if(state.isAdmin && (state.noticeForm.companyId == 0 || state.noticeForm.companyId == null)){
+ return
+ }
+ const res = await getEmployeeRecords({companyId: state.noticeForm.companyId})
+ if(res.code == 200){
+ state.userList = res.data ? res.data :[]
+ }else{
+ ElMessage.warning(res.message)
+ }
+}
+const handleClose = () => {
+ if(title.value ==="新增"|| title.value ==='编辑'){
+ myEditor.value.clear();
+ showEditor.value=false
+ }
+
+ reset()
+ noticeRef.value.clearValidate();
+ dialogVisible.value = false;
+}
+const reset = () => {
+ state.noticeForm = {
+ id: '',
+ content: '',
+ companyId:null,
+ checkId:null,
+ type:4,
+ companyName: ''
+ }
+ state.companyList = []
+ state.userList = []
+}
+const changeCom = () => {
+ state.noticeForm.checkId = ''
+ getUserList()
+}
+
+
+defineExpose({
+ openDialog
+});
+
+</script>
+
+<style scoped lang="scss">
+.notice{
+ :deep(.el-form .el-form-item__label) {
+ font-size: 15px;
+ }
+ .file {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ }
+}
+.reviewTable {
+ :deep(table){
+ border: 1px solid #ccc;
+ text-align: center;
+ }
+ :deep(table td){
+ border: 1px solid #ccc;
+ text-align: center;
+ padding: 0 5px;
+ }
+ :deep(table th){
+ border: 1px solid #ccc;
+ }
+}
+
+
+</style>
diff --git a/src/views/build/conpanyFunctionConsult/Decree/appointmentBook/index.vue b/src/views/build/conpanyFunctionConsult/Decree/appointmentBook/index.vue
new file mode 100644
index 0000000..0b9df13
--- /dev/null
+++ b/src/views/build/conpanyFunctionConsult/Decree/appointmentBook/index.vue
@@ -0,0 +1,213 @@
+<template>
+ <div class="app-container">
+ <div style="margin-bottom: 10px">
+ <el-form style="display: flex;flex-wrap: wrap">
+ <el-form-item>
+ <el-button
+ type="primary"
+ plain
+ icon="Plus"
+ @click="openDialog('add',{})"
+ v-hasPermi="['qualityManual:add']"
+ >新增</el-button>
+ </el-form-item>
+ <el-form-item label="单位名称:" v-if="data.isAdmin" style="margin-left: 20px">
+ <el-select v-model="data.queryParams.companyId" placeholder="请选择" filterable clearable>
+ <el-option
+ v-for="item in data.companyList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.id">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item v-if="data.isAdmin">
+ <el-button type="primary" style="margin-left: 30px" @click="searchClick">查询</el-button>
+ <el-button plain @click="reset">重置</el-button>
+ </el-form-item>
+
+ </el-form>
+ </div>
+ <!-- 表格数据 -->
+ <el-table v-loading="loading" :data="dataList" :border="true">
+ <el-table-column type="index" label="序号" width="80" align="center"></el-table-column>
+ <el-table-column label="管理者代表授权书" prop="content" align="left" header-align="center" width="500">
+ <template #default="scope">
+ <div v-html="scope.row.content"></div>
+ </template>
+ </el-table-column>
+ <el-table-column label="批准人" prop="checkName" align="center" />
+ <el-table-column label="签名" prop="policy" align="center" >
+ <template #default="scope">
+ <div v-if="scope.row.sign ">
+ <el-image
+ style="width: 100px; height: 100%"
+ :src= "scope.row.sign ? scope.row.sign[0] : '' "
+ :zoom-rate="1.2"
+ :max-scale="7"
+ :min-scale="0.2"
+ :preview-src-list="scope.row.sign ? scope.row.sign : '' "
+ :initial-index="0"
+ fit="cover"
+ :preview-teleported=true
+ />
+ </div>
+ <div v-else></div>
+ </template>
+ </el-table-column>
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="160">
+ <template #default="scope">
+ <el-button link type="primary" @click="openDialog('review',scope.row)" >查看</el-button>
+ <el-button link type="primary" @click="openDialog('edit',scope.row)" v-hasPermi="['qualityManual:edit']">编辑</el-button>
+ <el-button link type="danger" @click="handleDelete(scope.row)" v-hasPermi="['qualityManual:del']">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+
+ <div class="pag-container">
+ <el-pagination
+ v-model:current-page="data.queryParams.pageNum"
+ v-model:page-size="data.queryParams.pageSize"
+ :page-sizes="[10,15,20,25]"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="total"
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ />
+ </div>
+ <policyDialog ref="noticeRef" @getList = "getList"></policyDialog>
+ </div>
+</template>
+
+<script setup>
+import {getCurrentInstance, onMounted, reactive, ref, toRefs} from "vue";
+import policyDialog from "./components/editDialog.vue"
+import {ElMessage, ElMessageBox} from "element-plus";
+import {getCompany} from "@/api/onlineEducation/company";
+import Cookies from "js-cookie";
+import {delCom, getCom} from "@/api/companyInfo/overview";
+import {delPolicy, getPolicy} from "@/api/companyInfo/policy";
+import {delDecree, getDecree} from "@/api/decree";
+const { proxy } = getCurrentInstance();
+const loading = ref(false);
+const noticeRef = ref();
+const loadingCompany = ref(false)
+const data = reactive({
+ queryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ type:4,
+ companyId: null,
+ },
+ companyList: [],
+ isAdmin: false,
+ companyName: ''
+});
+const dataList = ref([]);
+const total = ref(0);
+
+const { queryParams } = toRefs(data);
+
+onMounted(() => {
+ const userInfo = JSON.parse(Cookies.get('userInfo'))
+ console.log("userInfo",userInfo)
+ data.isAdmin = userInfo.userType === 0;
+ if(data.isAdmin){
+ data.queryParams.companyId = null
+ }else {
+ data.queryParams.companyId = userInfo.companyId
+ }
+ getList();
+ if(data.isAdmin){
+ getCompanyList()
+ }
+});
+const getList = async () => {
+ loading.value = true;
+ const res = await getDecree(data.queryParams);
+ if(res.code === 200){
+ dataList.value = res.data.list.map(item => {
+ return {
+ ...item,
+ sign: item.sign ? [import.meta.env.VITE_APP_BASE_API + '/' + item.sign] :[]
+ }
+ })
+ total.value = res.data.total
+ }else{
+ ElMessage.warning(res.message)
+ }
+ loading.value = false;
+}
+
+const searchClick = () => {
+ getList();
+}
+const openDialog = (type, value) => {
+ noticeRef.value.openDialog(type, value,data.companyList);
+}
+const getCompanyList = async ()=>{
+ const queryParams = {
+ pageNum: 1,
+ pageSize: 999
+ }
+ const res = await getCompany(queryParams)
+ if (res.code == 200) {
+ data.companyList = res.data.list?res.data.list:[]
+ // data.queryParams.companyId = data.companyList[0].id
+ } else {
+ ElMessage.warning(res.message)
+ }
+}
+
+const handleSizeChange = (val) => {
+ data.queryParams.pageSize = val
+ getList()
+}
+const handleCurrentChange = (val) => {
+ data.queryParams.pageNum = val
+ getList()
+}
+
+/** 重置新增的表单以及其他数据 */
+function reset() {
+ data.queryParams = {
+ companyId: null,
+ pageNum: 1,
+ pageSize: 10,
+ type:4,
+ }
+ data.companyName = ''
+ data.companyList = [];
+ getList();
+ getCompanyList()
+}
+const handleDelete = (val) => {
+ ElMessageBox.confirm(
+ '确定删除此条数据?',
+ '提示',
+ {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ })
+ .then( async() => {
+ const res = await delDecree(val.id);
+ if(res.code === 200){
+ ElMessage({
+ type: 'success',
+ message: '删除成功'
+ });
+ getList();
+ }else{
+ ElMessage.warning(res.message)
+ }
+ })
+}
+
+</script>
+<style lang="scss">
+.pag-container{
+ float: right;
+ margin-top: 10px;
+}
+</style>
diff --git a/src/views/build/conpanyFunctionConsult/Decree/qualityManuals/components/editDialog.vue b/src/views/build/conpanyFunctionConsult/Decree/qualityManuals/components/editDialog.vue
new file mode 100644
index 0000000..06fdfee
--- /dev/null
+++ b/src/views/build/conpanyFunctionConsult/Decree/qualityManuals/components/editDialog.vue
@@ -0,0 +1,241 @@
+<template>
+ <div class="notice">
+ <el-dialog
+ v-model="dialogVisible"
+ :title="title"
+ width="800px"
+ :before-close="handleClose"
+ >
+ <el-form :model="state.noticeForm" size="default" ref="noticeRef" :rules="title === '新增' || title === '编辑' ? state.formRules : {}" label-width="140px" >
+ <el-form-item label="单位名称:" prop="companyId" v-if="state.isAdmin">
+ <el-select v-model="state.noticeForm.companyId" placeholder="请选择" @change="changeCom" filterable clearable style="width: 100%" :disabled="title == '查看' || title == '编辑' || !state.isAdmin">
+ <el-option
+ v-for="item in state.companyList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.id">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="质量手册颁布令:" v-if="showEditor" required>
+ <t-editor style="width: 800px" ref="myEditor" :toolbar="toolbar" :value="state.noticeForm.content" ></t-editor>
+ </el-form-item>
+ <el-form-item label="质量手册颁布令:" v-else>
+ <div class="ql-container ql-snow" style="height: 500px;width: 100%;margin-top: 10px;" >
+ <div class="ql-editor">
+ <div class="reviewTable" v-html="state.noticeForm.content" ></div>
+ </div>
+ </div>
+ </el-form-item>
+ <el-form-item label="批准人:" prop="checkId">
+ <el-select clearable v-model="state.noticeForm.checkId" :disabled="title =='查看'" filterable placeholder="批准人" style="width: 100%">
+ <el-option
+ v-for="item in state.userList"
+ :key="item.userId"
+ :label="item.name"
+ :value="item.userId"
+ />
+ </el-select>
+ </el-form-item>
+ </el-form>
+ <template #footer v-if="!isReview">
+ <span class="dialog-footer">
+ <el-button @click="handleClose" size="default">取 消</el-button>
+ <el-button type="primary" @click="onSubmit" size="default" v-preReClick>确认</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+<script setup>
+import {nextTick, onMounted, reactive, ref, toRefs, watch} from 'vue'
+import WeEditor from "@/components/WeEditor/index.vue";
+import TEditor from "@/components/Tinymce/Tinymce.vue"
+import {ElMessage} from "element-plus";
+import Cookies from "js-cookie";
+import {getEmployeeRecords} from "@/api/onlineEducation/user";
+import {addDecree, editDecree} from "@/api/decree";
+
+
+const emit = defineEmits(["getList"]);
+
+const dialogVisible = ref(false);
+const toolbar = ref('fontsizeselect | undo redo')
+const title = ref("");
+const noticeRef = ref();
+const fileList = ref([]);
+const myEditor = ref();
+const isReview = ref(false);
+const showEditor = ref(true);
+const state = reactive({
+ noticeForm: {
+ id: '',
+ content: '',
+ companyId:null,
+ checkId:null,
+ type:1,
+ companyName: ''
+ },
+ formRules:{
+ companyId: [{ required: true, message: '请选择企业', trigger: 'blur' }],
+ content: [{ required: true, message: '请输入质量手册颁布令', trigger: 'blur' }],
+ checkId: [{ required: true, message: '请选择批准人', trigger: 'blur' }],
+ },
+ isAdmin: false,
+ companyList: [],
+ userList:[]
+
+})
+
+onMounted(() => {
+
+});
+const openDialog = async (type, value,companyList) => {
+ const userInfo = JSON.parse(Cookies.get('userInfo'))
+ state.isAdmin = userInfo.userType === 0;
+ if(state.isAdmin){
+ state.companyList = companyList
+ state.noticeForm.companyId = null
+ }else {
+ state.noticeForm.companyId = userInfo.companyId
+ }
+ isReview.value = false;
+ showEditor.value = false
+ title.value = type === 'add' ? '新增' : type ==='edit' ? '编辑' : '查看' ;
+ if(type === 'edit' || type === 'review') {
+ Object.keys(state.noticeForm).forEach(key => {
+ if (key in value) {
+ state.noticeForm[key] = value[key]
+ }
+ })
+ }
+ if(type === 'review') {
+ showEditor.value = false
+ isReview.value = true;
+ }
+ if(type === 'edit' || type === 'add') {
+ showEditor.value = true;
+ isReview.value = false;
+ }
+ await getUserList()
+ dialogVisible.value = true;
+}
+
+const onSubmit = async () => {
+ state.noticeForm.content = tinyMCE.activeEditor.getContent();
+ if(!state.isAdmin){
+ const userInfo = JSON.parse(Cookies.get('userInfo'))
+ state.noticeForm.companyId = userInfo.companyId
+ }
+ const valid = await noticeRef.value.validate();
+ if(valid){
+ if(title.value === '新增'){
+ const {id,...data} = JSON.parse(JSON.stringify(state.noticeForm))
+ const res = await addDecree(data)
+ if(res.code === 200){
+ ElMessage({
+ type: 'success',
+ message: '新增成功'
+ });
+ }else{
+ ElMessage.warning(res.message)
+ }
+ emit("getList")
+ reset();
+ showEditor.value=false
+ myEditor.value.clear();
+ noticeRef.value.clearValidate();
+ dialogVisible.value = false;
+ }else if(title.value === '编辑') {
+ const {...data} = JSON.parse(JSON.stringify(state.noticeForm))
+ const res = await editDecree(data)
+ if(res.code === 200){
+ ElMessage({
+ type: 'success',
+ message: '编辑成功'
+ });
+ }else{
+ ElMessage.warning(res.message)
+ }
+ emit("getList")
+ reset();
+ showEditor.value=false
+ myEditor.value.clear();
+ noticeRef.value.clearValidate();
+ dialogVisible.value = false;
+ }
+ }
+}
+const getUserList = async ()=> {
+ if(state.isAdmin && (state.noticeForm.companyId == 0 || state.noticeForm.companyId == null)){
+ return
+ }
+ const res = await getEmployeeRecords({companyId: state.noticeForm.companyId})
+ if(res.code == 200){
+ state.userList = res.data ? res.data :[]
+ }else{
+ ElMessage.warning(res.message)
+ }
+}
+const handleClose = () => {
+ if(title.value ==="新增"|| title.value ==='编辑'){
+ myEditor.value.clear();
+ showEditor.value=false
+ }
+
+ reset()
+ noticeRef.value.clearValidate();
+ dialogVisible.value = false;
+}
+const reset = () => {
+ state.noticeForm = {
+ id: '',
+ content: '',
+ companyId:null,
+ checkId:null,
+ type:1,
+ companyName: ''
+ }
+ state.companyList = []
+ state.userList = []
+}
+const changeCom = () => {
+ state.noticeForm.checkId = ''
+ getUserList()
+}
+
+
+defineExpose({
+ openDialog
+});
+
+</script>
+
+<style scoped lang="scss">
+.notice{
+ :deep(.el-form .el-form-item__label) {
+ font-size: 15px;
+ }
+ .file {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ }
+}
+.reviewTable {
+ :deep(table){
+ border: 1px solid #ccc;
+ text-align: center;
+ }
+ :deep(table td){
+ border: 1px solid #ccc;
+ text-align: center;
+ padding: 0 5px;
+ }
+ :deep(table th){
+ border: 1px solid #ccc;
+ }
+}
+
+
+</style>
diff --git a/src/views/build/conpanyFunctionConsult/Decree/qualityManuals/index.vue b/src/views/build/conpanyFunctionConsult/Decree/qualityManuals/index.vue
new file mode 100644
index 0000000..24f6ab4
--- /dev/null
+++ b/src/views/build/conpanyFunctionConsult/Decree/qualityManuals/index.vue
@@ -0,0 +1,213 @@
+<template>
+ <div class="app-container">
+ <div style="margin-bottom: 10px">
+ <el-form style="display: flex;flex-wrap: wrap">
+ <el-form-item>
+ <el-button
+ type="primary"
+ plain
+ icon="Plus"
+ @click="openDialog('add',{})"
+ v-hasPermi="['qualityManual:add']"
+ >新增</el-button>
+ </el-form-item>
+ <el-form-item label="单位名称:" v-if="data.isAdmin" style="margin-left: 20px">
+ <el-select v-model="data.queryParams.companyId" placeholder="请选择" filterable clearable>
+ <el-option
+ v-for="item in data.companyList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.id">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item v-if="data.isAdmin">
+ <el-button type="primary" style="margin-left: 30px" @click="searchClick">查询</el-button>
+ <el-button plain @click="reset">重置</el-button>
+ </el-form-item>
+
+ </el-form>
+ </div>
+ <!-- 表格数据 -->
+ <el-table v-loading="loading" :data="dataList" :border="true">
+ <el-table-column type="index" label="序号" width="80" align="center"></el-table-column>
+ <el-table-column label="质量手册颁布令" prop="content" align="left" header-align="center" width="500">
+ <template #default="scope">
+ <div v-html="scope.row.content"></div>
+ </template>
+ </el-table-column>
+ <el-table-column label="批准人" prop="checkName" align="center" />
+ <el-table-column label="签名" prop="policy" align="center" >
+ <template #default="scope">
+ <div v-if="scope.row.sign ">
+ <el-image
+ style="width: 100px; height: 100%"
+ :src= "scope.row.sign ? scope.row.sign[0] : '' "
+ :zoom-rate="1.2"
+ :max-scale="7"
+ :min-scale="0.2"
+ :preview-src-list="scope.row.sign ? scope.row.sign : '' "
+ :initial-index="0"
+ fit="cover"
+ :preview-teleported=true
+ />
+ </div>
+ <div v-else></div>
+ </template>
+ </el-table-column>
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="160">
+ <template #default="scope">
+ <el-button link type="primary" @click="openDialog('review',scope.row)" >查看</el-button>
+ <el-button link type="primary" @click="openDialog('edit',scope.row)" v-hasPermi="['qualityManual:edit']">编辑</el-button>
+ <el-button link type="danger" @click="handleDelete(scope.row)" v-hasPermi="['qualityManual:del']">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+
+ <div class="pag-container">
+ <el-pagination
+ v-model:current-page="data.queryParams.pageNum"
+ v-model:page-size="data.queryParams.pageSize"
+ :page-sizes="[10,15,20,25]"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="total"
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ />
+ </div>
+ <policyDialog ref="noticeRef" @getList = "getList"></policyDialog>
+ </div>
+</template>
+
+<script setup>
+import {getCurrentInstance, onMounted, reactive, ref, toRefs} from "vue";
+import policyDialog from "./components/editDialog.vue"
+import {ElMessage, ElMessageBox} from "element-plus";
+import {getCompany} from "@/api/onlineEducation/company";
+import Cookies from "js-cookie";
+import {delCom, getCom} from "@/api/companyInfo/overview";
+import {delPolicy, getPolicy} from "@/api/companyInfo/policy";
+import {delDecree, getDecree} from "@/api/decree";
+const { proxy } = getCurrentInstance();
+const loading = ref(false);
+const noticeRef = ref();
+const loadingCompany = ref(false)
+const data = reactive({
+ queryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ type:1,
+ companyId: null,
+ },
+ companyList: [],
+ isAdmin: false,
+ companyName: ''
+});
+const dataList = ref([]);
+const total = ref(0);
+
+const { queryParams } = toRefs(data);
+
+onMounted(() => {
+ const userInfo = JSON.parse(Cookies.get('userInfo'))
+ console.log("userInfo",userInfo)
+ data.isAdmin = userInfo.userType === 0;
+ if(data.isAdmin){
+ data.queryParams.companyId = null
+ }else {
+ data.queryParams.companyId = userInfo.companyId
+ }
+ getList();
+ if(data.isAdmin){
+ getCompanyList()
+ }
+});
+const getList = async () => {
+ loading.value = true;
+ const res = await getDecree(data.queryParams);
+ if(res.code === 200){
+ dataList.value = res.data.list.map(item => {
+ return {
+ ...item,
+ sign: item.sign ? [import.meta.env.VITE_APP_BASE_API + '/' + item.sign] :[]
+ }
+ })
+ total.value = res.data.total
+ }else{
+ ElMessage.warning(res.message)
+ }
+ loading.value = false;
+}
+
+const searchClick = () => {
+ getList();
+}
+const openDialog = (type, value) => {
+ noticeRef.value.openDialog(type, value,data.companyList);
+}
+const getCompanyList = async ()=>{
+ const queryParams = {
+ pageNum: 1,
+ pageSize: 999
+ }
+ const res = await getCompany(queryParams)
+ if (res.code == 200) {
+ data.companyList = res.data.list?res.data.list:[]
+ // data.queryParams.companyId = data.companyList[0].id
+ } else {
+ ElMessage.warning(res.message)
+ }
+}
+
+const handleSizeChange = (val) => {
+ data.queryParams.pageSize = val
+ getList()
+}
+const handleCurrentChange = (val) => {
+ data.queryParams.pageNum = val
+ getList()
+}
+
+/** 重置新增的表单以及其他数据 */
+function reset() {
+ data.queryParams = {
+ companyId: null,
+ pageNum: 1,
+ pageSize: 10,
+ type:1,
+ }
+ data.companyName = ''
+ data.companyList = [];
+ getList();
+ getCompanyList()
+}
+const handleDelete = (val) => {
+ ElMessageBox.confirm(
+ '确定删除此条数据?',
+ '提示',
+ {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ })
+ .then( async() => {
+ const res = await delDecree(val.id);
+ if(res.code === 200){
+ ElMessage({
+ type: 'success',
+ message: '删除成功'
+ });
+ getList();
+ }else{
+ ElMessage.warning(res.message)
+ }
+ })
+}
+
+</script>
+<style lang="scss">
+.pag-container{
+ float: right;
+ margin-top: 10px;
+}
+</style>
diff --git a/src/views/build/conpanyFunctionConsult/Decree/qualityObjects/components/editDialog.vue b/src/views/build/conpanyFunctionConsult/Decree/qualityObjects/components/editDialog.vue
new file mode 100644
index 0000000..94eec94
--- /dev/null
+++ b/src/views/build/conpanyFunctionConsult/Decree/qualityObjects/components/editDialog.vue
@@ -0,0 +1,241 @@
+<template>
+ <div class="notice">
+ <el-dialog
+ v-model="dialogVisible"
+ :title="title"
+ width="800px"
+ :before-close="handleClose"
+ >
+ <el-form :model="state.noticeForm" size="default" ref="noticeRef" :rules="title === '新增' || title === '编辑' ? state.formRules : {}" label-width="140px" >
+ <el-form-item label="单位名称:" prop="companyId" v-if="state.isAdmin">
+ <el-select v-model="state.noticeForm.companyId" placeholder="请选择" @change="changeCom" filterable clearable style="width: 100%" :disabled="title == '查看' || title == '编辑' || !state.isAdmin">
+ <el-option
+ v-for="item in state.companyList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.id">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="质量目标颁布令:" v-if="showEditor" required>
+ <t-editor style="width: 800px" ref="myEditor" :toolbar="toolbar" :value="state.noticeForm.content" ></t-editor>
+ </el-form-item>
+ <el-form-item label="质量目标颁布令:" v-else>
+ <div class="ql-container ql-snow" style="height: 500px;width: 100%;margin-top: 10px;" >
+ <div class="ql-editor">
+ <div class="reviewTable" v-html="state.noticeForm.content" ></div>
+ </div>
+ </div>
+ </el-form-item>
+ <el-form-item label="批准人:" prop="checkId">
+ <el-select clearable v-model="state.noticeForm.checkId" :disabled="title =='查看'" filterable placeholder="批准人" style="width: 100%">
+ <el-option
+ v-for="item in state.userList"
+ :key="item.userId"
+ :label="item.name"
+ :value="item.userId"
+ />
+ </el-select>
+ </el-form-item>
+ </el-form>
+ <template #footer v-if="!isReview">
+ <span class="dialog-footer">
+ <el-button @click="handleClose" size="default">取 消</el-button>
+ <el-button type="primary" @click="onSubmit" size="default" v-preReClick>确认</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+<script setup>
+import {nextTick, onMounted, reactive, ref, toRefs, watch} from 'vue'
+import WeEditor from "@/components/WeEditor/index.vue";
+import TEditor from "@/components/Tinymce/Tinymce.vue"
+import {ElMessage} from "element-plus";
+import Cookies from "js-cookie";
+import {getEmployeeRecords} from "@/api/onlineEducation/user";
+import {addDecree, editDecree} from "@/api/decree";
+
+
+const emit = defineEmits(["getList"]);
+
+const dialogVisible = ref(false);
+const toolbar = ref('fontsizeselect | undo redo')
+const title = ref("");
+const noticeRef = ref();
+const fileList = ref([]);
+const myEditor = ref();
+const isReview = ref(false);
+const showEditor = ref(true);
+const state = reactive({
+ noticeForm: {
+ id: '',
+ content: '',
+ companyId:null,
+ checkId:null,
+ type:3,
+ companyName: ''
+ },
+ formRules:{
+ companyId: [{ required: true, message: '请选择企业', trigger: 'blur' }],
+ content: [{ required: true, message: '请输入质量目标颁布令', trigger: 'blur' }],
+ checkId: [{ required: true, message: '请选择批准人', trigger: 'blur' }],
+ },
+ isAdmin: false,
+ companyList: [],
+ userList:[]
+
+})
+
+onMounted(() => {
+
+});
+const openDialog = async (type, value,companyList) => {
+ const userInfo = JSON.parse(Cookies.get('userInfo'))
+ state.isAdmin = userInfo.userType === 0;
+ if(state.isAdmin){
+ state.companyList = companyList
+ state.noticeForm.companyId = null
+ }else {
+ state.noticeForm.companyId = userInfo.companyId
+ }
+ isReview.value = false;
+ showEditor.value = false
+ title.value = type === 'add' ? '新增' : type ==='edit' ? '编辑' : '查看' ;
+ if(type === 'edit' || type === 'review') {
+ Object.keys(state.noticeForm).forEach(key => {
+ if (key in value) {
+ state.noticeForm[key] = value[key]
+ }
+ })
+ }
+ if(type === 'review') {
+ showEditor.value = false
+ isReview.value = true;
+ }
+ if(type === 'edit' || type === 'add') {
+ showEditor.value = true;
+ isReview.value = false;
+ }
+ await getUserList()
+ dialogVisible.value = true;
+}
+
+const onSubmit = async () => {
+ state.noticeForm.content = tinyMCE.activeEditor.getContent();
+ if(!state.isAdmin){
+ const userInfo = JSON.parse(Cookies.get('userInfo'))
+ state.noticeForm.companyId = userInfo.companyId
+ }
+ const valid = await noticeRef.value.validate();
+ if(valid){
+ if(title.value === '新增'){
+ const {id,...data} = JSON.parse(JSON.stringify(state.noticeForm))
+ const res = await addDecree(data)
+ if(res.code === 200){
+ ElMessage({
+ type: 'success',
+ message: '新增成功'
+ });
+ }else{
+ ElMessage.warning(res.message)
+ }
+ emit("getList")
+ reset();
+ showEditor.value=false
+ myEditor.value.clear();
+ noticeRef.value.clearValidate();
+ dialogVisible.value = false;
+ }else if(title.value === '编辑') {
+ const {...data} = JSON.parse(JSON.stringify(state.noticeForm))
+ const res = await editDecree(data)
+ if(res.code === 200){
+ ElMessage({
+ type: 'success',
+ message: '编辑成功'
+ });
+ }else{
+ ElMessage.warning(res.message)
+ }
+ emit("getList")
+ reset();
+ showEditor.value=false
+ myEditor.value.clear();
+ noticeRef.value.clearValidate();
+ dialogVisible.value = false;
+ }
+ }
+}
+const getUserList = async ()=> {
+ if(state.isAdmin && (state.noticeForm.companyId == 0 || state.noticeForm.companyId == null)){
+ return
+ }
+ const res = await getEmployeeRecords({companyId: state.noticeForm.companyId})
+ if(res.code == 200){
+ state.userList = res.data ? res.data :[]
+ }else{
+ ElMessage.warning(res.message)
+ }
+}
+const handleClose = () => {
+ if(title.value ==="新增"|| title.value ==='编辑'){
+ myEditor.value.clear();
+ showEditor.value=false
+ }
+
+ reset()
+ noticeRef.value.clearValidate();
+ dialogVisible.value = false;
+}
+const reset = () => {
+ state.noticeForm = {
+ id: '',
+ content: '',
+ companyId:null,
+ checkId:null,
+ type:3,
+ companyName: ''
+ }
+ state.companyList = []
+ state.userList = []
+}
+const changeCom = () => {
+ state.noticeForm.checkId = ''
+ getUserList()
+}
+
+
+defineExpose({
+ openDialog
+});
+
+</script>
+
+<style scoped lang="scss">
+.notice{
+ :deep(.el-form .el-form-item__label) {
+ font-size: 15px;
+ }
+ .file {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ }
+}
+.reviewTable {
+ :deep(table){
+ border: 1px solid #ccc;
+ text-align: center;
+ }
+ :deep(table td){
+ border: 1px solid #ccc;
+ text-align: center;
+ padding: 0 5px;
+ }
+ :deep(table th){
+ border: 1px solid #ccc;
+ }
+}
+
+
+</style>
diff --git a/src/views/build/conpanyFunctionConsult/Decree/qualityObjects/index.vue b/src/views/build/conpanyFunctionConsult/Decree/qualityObjects/index.vue
new file mode 100644
index 0000000..6ebd177
--- /dev/null
+++ b/src/views/build/conpanyFunctionConsult/Decree/qualityObjects/index.vue
@@ -0,0 +1,213 @@
+<template>
+ <div class="app-container">
+ <div style="margin-bottom: 10px">
+ <el-form style="display: flex;flex-wrap: wrap">
+ <el-form-item>
+ <el-button
+ type="primary"
+ plain
+ icon="Plus"
+ @click="openDialog('add',{})"
+ v-hasPermi="['qualityManual:add']"
+ >新增</el-button>
+ </el-form-item>
+ <el-form-item label="单位名称:" v-if="data.isAdmin" style="margin-left: 20px">
+ <el-select v-model="data.queryParams.companyId" placeholder="请选择" filterable clearable>
+ <el-option
+ v-for="item in data.companyList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.id">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item v-if="data.isAdmin">
+ <el-button type="primary" style="margin-left: 30px" @click="searchClick">查询</el-button>
+ <el-button plain @click="reset">重置</el-button>
+ </el-form-item>
+
+ </el-form>
+ </div>
+ <!-- 表格数据 -->
+ <el-table v-loading="loading" :data="dataList" :border="true">
+ <el-table-column type="index" label="序号" width="80" align="center"></el-table-column>
+ <el-table-column label="质量目标颁布令" prop="content" align="left" header-align="center" width="500">
+ <template #default="scope">
+ <div v-html="scope.row.content"></div>
+ </template>
+ </el-table-column>
+ <el-table-column label="批准人" prop="checkName" align="center" />
+ <el-table-column label="签名" prop="policy" align="center" >
+ <template #default="scope">
+ <div v-if="scope.row.sign ">
+ <el-image
+ style="width: 100px; height: 100%"
+ :src= "scope.row.sign ? scope.row.sign[0] : '' "
+ :zoom-rate="1.2"
+ :max-scale="7"
+ :min-scale="0.2"
+ :preview-src-list="scope.row.sign ? scope.row.sign : '' "
+ :initial-index="0"
+ fit="cover"
+ :preview-teleported=true
+ />
+ </div>
+ <div v-else></div>
+ </template>
+ </el-table-column>
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="160">
+ <template #default="scope">
+ <el-button link type="primary" @click="openDialog('review',scope.row)" >查看</el-button>
+ <el-button link type="primary" @click="openDialog('edit',scope.row)" v-hasPermi="['qualityManual:edit']">编辑</el-button>
+ <el-button link type="danger" @click="handleDelete(scope.row)" v-hasPermi="['qualityManual:del']">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+
+ <div class="pag-container">
+ <el-pagination
+ v-model:current-page="data.queryParams.pageNum"
+ v-model:page-size="data.queryParams.pageSize"
+ :page-sizes="[10,15,20,25]"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="total"
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ />
+ </div>
+ <policyDialog ref="noticeRef" @getList = "getList"></policyDialog>
+ </div>
+</template>
+
+<script setup>
+import {getCurrentInstance, onMounted, reactive, ref, toRefs} from "vue";
+import policyDialog from "./components/editDialog.vue"
+import {ElMessage, ElMessageBox} from "element-plus";
+import {getCompany} from "@/api/onlineEducation/company";
+import Cookies from "js-cookie";
+import {delCom, getCom} from "@/api/companyInfo/overview";
+import {delPolicy, getPolicy} from "@/api/companyInfo/policy";
+import {delDecree, getDecree} from "@/api/decree";
+const { proxy } = getCurrentInstance();
+const loading = ref(false);
+const noticeRef = ref();
+const loadingCompany = ref(false)
+const data = reactive({
+ queryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ type:3,
+ companyId: null,
+ },
+ companyList: [],
+ isAdmin: false,
+ companyName: ''
+});
+const dataList = ref([]);
+const total = ref(0);
+
+const { queryParams } = toRefs(data);
+
+onMounted(() => {
+ const userInfo = JSON.parse(Cookies.get('userInfo'))
+ console.log("userInfo",userInfo)
+ data.isAdmin = userInfo.userType === 0;
+ if(data.isAdmin){
+ data.queryParams.companyId = null
+ }else {
+ data.queryParams.companyId = userInfo.companyId
+ }
+ getList();
+ if(data.isAdmin){
+ getCompanyList()
+ }
+});
+const getList = async () => {
+ loading.value = true;
+ const res = await getDecree(data.queryParams);
+ if(res.code === 200){
+ dataList.value = res.data.list.map(item => {
+ return {
+ ...item,
+ sign: item.sign ? [import.meta.env.VITE_APP_BASE_API + '/' + item.sign] :[]
+ }
+ })
+ total.value = res.data.total
+ }else{
+ ElMessage.warning(res.message)
+ }
+ loading.value = false;
+}
+
+const searchClick = () => {
+ getList();
+}
+const openDialog = (type, value) => {
+ noticeRef.value.openDialog(type, value,data.companyList);
+}
+const getCompanyList = async ()=>{
+ const queryParams = {
+ pageNum: 1,
+ pageSize: 999
+ }
+ const res = await getCompany(queryParams)
+ if (res.code == 200) {
+ data.companyList = res.data.list?res.data.list:[]
+ // data.queryParams.companyId = data.companyList[0].id
+ } else {
+ ElMessage.warning(res.message)
+ }
+}
+
+const handleSizeChange = (val) => {
+ data.queryParams.pageSize = val
+ getList()
+}
+const handleCurrentChange = (val) => {
+ data.queryParams.pageNum = val
+ getList()
+}
+
+/** 重置新增的表单以及其他数据 */
+function reset() {
+ data.queryParams = {
+ companyId: null,
+ pageNum: 1,
+ pageSize: 10,
+ type:3,
+ }
+ data.companyName = ''
+ data.companyList = [];
+ getList();
+ getCompanyList()
+}
+const handleDelete = (val) => {
+ ElMessageBox.confirm(
+ '确定删除此条数据?',
+ '提示',
+ {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ })
+ .then( async() => {
+ const res = await delDecree(val.id);
+ if(res.code === 200){
+ ElMessage({
+ type: 'success',
+ message: '删除成功'
+ });
+ getList();
+ }else{
+ ElMessage.warning(res.message)
+ }
+ })
+}
+
+</script>
+<style lang="scss">
+.pag-container{
+ float: right;
+ margin-top: 10px;
+}
+</style>
diff --git a/src/views/build/conpanyFunctionConsult/Decree/qualityPolicys/components/editDialog.vue b/src/views/build/conpanyFunctionConsult/Decree/qualityPolicys/components/editDialog.vue
new file mode 100644
index 0000000..bca4f49
--- /dev/null
+++ b/src/views/build/conpanyFunctionConsult/Decree/qualityPolicys/components/editDialog.vue
@@ -0,0 +1,241 @@
+<template>
+ <div class="notice">
+ <el-dialog
+ v-model="dialogVisible"
+ :title="title"
+ width="800px"
+ :before-close="handleClose"
+ >
+ <el-form :model="state.noticeForm" size="default" ref="noticeRef" :rules="title === '新增' || title === '编辑' ? state.formRules : {}" label-width="140px" >
+ <el-form-item label="单位名称:" prop="companyId" v-if="state.isAdmin">
+ <el-select v-model="state.noticeForm.companyId" placeholder="请选择" @change="changeCom" filterable clearable style="width: 100%" :disabled="title == '查看' || title == '编辑' || !state.isAdmin">
+ <el-option
+ v-for="item in state.companyList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.id">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="质量方针颁布令:" v-if="showEditor" required>
+ <t-editor style="width: 800px" ref="myEditor" :toolbar="toolbar" :value="state.noticeForm.content" ></t-editor>
+ </el-form-item>
+ <el-form-item label="质量方针颁布令:" v-else>
+ <div class="ql-container ql-snow" style="height: 500px;width: 100%;margin-top: 10px;" >
+ <div class="ql-editor">
+ <div class="reviewTable" v-html="state.noticeForm.content" ></div>
+ </div>
+ </div>
+ </el-form-item>
+ <el-form-item label="批准人:" prop="checkId">
+ <el-select clearable v-model="state.noticeForm.checkId" :disabled="title =='查看'" filterable placeholder="批准人" style="width: 100%">
+ <el-option
+ v-for="item in state.userList"
+ :key="item.userId"
+ :label="item.name"
+ :value="item.userId"
+ />
+ </el-select>
+ </el-form-item>
+ </el-form>
+ <template #footer v-if="!isReview">
+ <span class="dialog-footer">
+ <el-button @click="handleClose" size="default">取 消</el-button>
+ <el-button type="primary" @click="onSubmit" size="default" v-preReClick>确认</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+<script setup>
+import {nextTick, onMounted, reactive, ref, toRefs, watch} from 'vue'
+import WeEditor from "@/components/WeEditor/index.vue";
+import TEditor from "@/components/Tinymce/Tinymce.vue"
+import {ElMessage} from "element-plus";
+import Cookies from "js-cookie";
+import {getEmployeeRecords} from "@/api/onlineEducation/user";
+import {addDecree, editDecree} from "@/api/decree";
+
+
+const emit = defineEmits(["getList"]);
+
+const dialogVisible = ref(false);
+const toolbar = ref('fontsizeselect | undo redo')
+const title = ref("");
+const noticeRef = ref();
+const fileList = ref([]);
+const myEditor = ref();
+const isReview = ref(false);
+const showEditor = ref(true);
+const state = reactive({
+ noticeForm: {
+ id: '',
+ content: '',
+ companyId:null,
+ checkId:null,
+ type:2,
+ companyName: ''
+ },
+ formRules:{
+ companyId: [{ required: true, message: '请选择企业', trigger: 'blur' }],
+ content: [{ required: true, message: '请输入质量方针颁布令', trigger: 'blur' }],
+ checkId: [{ required: true, message: '请选择批准人', trigger: 'blur' }],
+ },
+ isAdmin: false,
+ companyList: [],
+ userList:[]
+
+})
+
+onMounted(() => {
+
+});
+const openDialog = async (type, value,companyList) => {
+ const userInfo = JSON.parse(Cookies.get('userInfo'))
+ state.isAdmin = userInfo.userType === 0;
+ if(state.isAdmin){
+ state.companyList = companyList
+ state.noticeForm.companyId = null
+ }else {
+ state.noticeForm.companyId = userInfo.companyId
+ }
+ isReview.value = false;
+ showEditor.value = false
+ title.value = type === 'add' ? '新增' : type ==='edit' ? '编辑' : '查看' ;
+ if(type === 'edit' || type === 'review') {
+ Object.keys(state.noticeForm).forEach(key => {
+ if (key in value) {
+ state.noticeForm[key] = value[key]
+ }
+ })
+ }
+ if(type === 'review') {
+ showEditor.value = false
+ isReview.value = true;
+ }
+ if(type === 'edit' || type === 'add') {
+ showEditor.value = true;
+ isReview.value = false;
+ }
+ await getUserList()
+ dialogVisible.value = true;
+}
+
+const onSubmit = async () => {
+ state.noticeForm.content = tinyMCE.activeEditor.getContent();
+ if(!state.isAdmin){
+ const userInfo = JSON.parse(Cookies.get('userInfo'))
+ state.noticeForm.companyId = userInfo.companyId
+ }
+ const valid = await noticeRef.value.validate();
+ if(valid){
+ if(title.value === '新增'){
+ const {id,...data} = JSON.parse(JSON.stringify(state.noticeForm))
+ const res = await addDecree(data)
+ if(res.code === 200){
+ ElMessage({
+ type: 'success',
+ message: '新增成功'
+ });
+ }else{
+ ElMessage.warning(res.message)
+ }
+ emit("getList")
+ reset();
+ showEditor.value=false
+ myEditor.value.clear();
+ noticeRef.value.clearValidate();
+ dialogVisible.value = false;
+ }else if(title.value === '编辑') {
+ const {...data} = JSON.parse(JSON.stringify(state.noticeForm))
+ const res = await editDecree(data)
+ if(res.code === 200){
+ ElMessage({
+ type: 'success',
+ message: '编辑成功'
+ });
+ }else{
+ ElMessage.warning(res.message)
+ }
+ emit("getList")
+ reset();
+ showEditor.value=false
+ myEditor.value.clear();
+ noticeRef.value.clearValidate();
+ dialogVisible.value = false;
+ }
+ }
+}
+const getUserList = async ()=> {
+ if(state.isAdmin && (state.noticeForm.companyId == 0 || state.noticeForm.companyId == null)){
+ return
+ }
+ const res = await getEmployeeRecords({companyId: state.noticeForm.companyId})
+ if(res.code == 200){
+ state.userList = res.data ? res.data :[]
+ }else{
+ ElMessage.warning(res.message)
+ }
+}
+const handleClose = () => {
+ if(title.value ==="新增"|| title.value ==='编辑'){
+ myEditor.value.clear();
+ showEditor.value=false
+ }
+
+ reset()
+ noticeRef.value.clearValidate();
+ dialogVisible.value = false;
+}
+const reset = () => {
+ state.noticeForm = {
+ id: '',
+ content: '',
+ companyId:null,
+ checkId:null,
+ type:2,
+ companyName: ''
+ }
+ state.companyList = []
+ state.userList = []
+}
+const changeCom = () => {
+ state.noticeForm.checkId = ''
+ getUserList()
+}
+
+
+defineExpose({
+ openDialog
+});
+
+</script>
+
+<style scoped lang="scss">
+.notice{
+ :deep(.el-form .el-form-item__label) {
+ font-size: 15px;
+ }
+ .file {
+ display: flex;
+ flex-direction: column;
+ align-items: flex-start;
+ }
+}
+.reviewTable {
+ :deep(table){
+ border: 1px solid #ccc;
+ text-align: center;
+ }
+ :deep(table td){
+ border: 1px solid #ccc;
+ text-align: center;
+ padding: 0 5px;
+ }
+ :deep(table th){
+ border: 1px solid #ccc;
+ }
+}
+
+
+</style>
diff --git a/src/views/build/conpanyFunctionConsult/Decree/qualityPolicys/index.vue b/src/views/build/conpanyFunctionConsult/Decree/qualityPolicys/index.vue
new file mode 100644
index 0000000..29259cd
--- /dev/null
+++ b/src/views/build/conpanyFunctionConsult/Decree/qualityPolicys/index.vue
@@ -0,0 +1,213 @@
+<template>
+ <div class="app-container">
+ <div style="margin-bottom: 10px">
+ <el-form style="display: flex;flex-wrap: wrap">
+ <el-form-item>
+ <el-button
+ type="primary"
+ plain
+ icon="Plus"
+ @click="openDialog('add',{})"
+ v-hasPermi="['qualityManual:add']"
+ >新增</el-button>
+ </el-form-item>
+ <el-form-item label="单位名称:" v-if="data.isAdmin" style="margin-left: 20px">
+ <el-select v-model="data.queryParams.companyId" placeholder="请选择" filterable clearable>
+ <el-option
+ v-for="item in data.companyList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.id">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item v-if="data.isAdmin">
+ <el-button type="primary" style="margin-left: 30px" @click="searchClick">查询</el-button>
+ <el-button plain @click="reset">重置</el-button>
+ </el-form-item>
+
+ </el-form>
+ </div>
+ <!-- 表格数据 -->
+ <el-table v-loading="loading" :data="dataList" :border="true">
+ <el-table-column type="index" label="序号" width="80" align="center"></el-table-column>
+ <el-table-column label="质量方针颁布令" prop="content" align="left" header-align="center" width="500">
+ <template #default="scope">
+ <div v-html="scope.row.content"></div>
+ </template>
+ </el-table-column>
+ <el-table-column label="批准人" prop="checkName" align="center" />
+ <el-table-column label="签名" prop="policy" align="center" >
+ <template #default="scope">
+ <div v-if="scope.row.sign ">
+ <el-image
+ style="width: 100px; height: 100%"
+ :src= "scope.row.sign ? scope.row.sign[0] : '' "
+ :zoom-rate="1.2"
+ :max-scale="7"
+ :min-scale="0.2"
+ :preview-src-list="scope.row.sign ? scope.row.sign : '' "
+ :initial-index="0"
+ fit="cover"
+ :preview-teleported=true
+ />
+ </div>
+ <div v-else></div>
+ </template>
+ </el-table-column>
+ <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="160">
+ <template #default="scope">
+ <el-button link type="primary" @click="openDialog('review',scope.row)" >查看</el-button>
+ <el-button link type="primary" @click="openDialog('edit',scope.row)" v-hasPermi="['qualityManual:edit']">编辑</el-button>
+ <el-button link type="danger" @click="handleDelete(scope.row)" v-hasPermi="['qualityManual:del']">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+
+ <div class="pag-container">
+ <el-pagination
+ v-model:current-page="data.queryParams.pageNum"
+ v-model:page-size="data.queryParams.pageSize"
+ :page-sizes="[10,15,20,25]"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="total"
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ />
+ </div>
+ <policyDialog ref="noticeRef" @getList = "getList"></policyDialog>
+ </div>
+</template>
+
+<script setup>
+import {getCurrentInstance, onMounted, reactive, ref, toRefs} from "vue";
+import policyDialog from "./components/editDialog.vue"
+import {ElMessage, ElMessageBox} from "element-plus";
+import {getCompany} from "@/api/onlineEducation/company";
+import Cookies from "js-cookie";
+import {delCom, getCom} from "@/api/companyInfo/overview";
+import {delPolicy, getPolicy} from "@/api/companyInfo/policy";
+import {delDecree, getDecree} from "@/api/decree";
+const { proxy } = getCurrentInstance();
+const loading = ref(false);
+const noticeRef = ref();
+const loadingCompany = ref(false)
+const data = reactive({
+ queryParams: {
+ pageNum: 1,
+ pageSize: 10,
+ type:2,
+ companyId: null,
+ },
+ companyList: [],
+ isAdmin: false,
+ companyName: ''
+});
+const dataList = ref([]);
+const total = ref(0);
+
+const { queryParams } = toRefs(data);
+
+onMounted(() => {
+ const userInfo = JSON.parse(Cookies.get('userInfo'))
+ console.log("userInfo",userInfo)
+ data.isAdmin = userInfo.userType === 0;
+ if(data.isAdmin){
+ data.queryParams.companyId = null
+ }else {
+ data.queryParams.companyId = userInfo.companyId
+ }
+ getList();
+ if(data.isAdmin){
+ getCompanyList()
+ }
+});
+const getList = async () => {
+ loading.value = true;
+ const res = await getDecree(data.queryParams);
+ if(res.code === 200){
+ dataList.value = res.data.list.map(item => {
+ return {
+ ...item,
+ sign: item.sign ? [import.meta.env.VITE_APP_BASE_API + '/' + item.sign] :[]
+ }
+ })
+ total.value = res.data.total
+ }else{
+ ElMessage.warning(res.message)
+ }
+ loading.value = false;
+}
+
+const searchClick = () => {
+ getList();
+}
+const openDialog = (type, value) => {
+ noticeRef.value.openDialog(type, value,data.companyList);
+}
+const getCompanyList = async ()=>{
+ const queryParams = {
+ pageNum: 1,
+ pageSize: 999
+ }
+ const res = await getCompany(queryParams)
+ if (res.code == 200) {
+ data.companyList = res.data.list?res.data.list:[]
+ // data.queryParams.companyId = data.companyList[0].id
+ } else {
+ ElMessage.warning(res.message)
+ }
+}
+
+const handleSizeChange = (val) => {
+ data.queryParams.pageSize = val
+ getList()
+}
+const handleCurrentChange = (val) => {
+ data.queryParams.pageNum = val
+ getList()
+}
+
+/** 重置新增的表单以及其他数据 */
+function reset() {
+ data.queryParams = {
+ companyId: null,
+ pageNum: 1,
+ pageSize: 10,
+ type:2,
+ }
+ data.companyName = ''
+ data.companyList = [];
+ getList();
+ getCompanyList()
+}
+const handleDelete = (val) => {
+ ElMessageBox.confirm(
+ '确定删除此条数据?',
+ '提示',
+ {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning',
+ })
+ .then( async() => {
+ const res = await delDecree(val.id);
+ if(res.code === 200){
+ ElMessage({
+ type: 'success',
+ message: '删除成功'
+ });
+ getList();
+ }else{
+ ElMessage.warning(res.message)
+ }
+ })
+}
+
+</script>
+<style lang="scss">
+.pag-container{
+ float: right;
+ margin-top: 10px;
+}
+</style>
diff --git a/src/views/system/clauseManage/index.vue b/src/views/system/clauseManage/index.vue
index 2c86f35..b0d5fd1 100644
--- a/src/views/system/clauseManage/index.vue
+++ b/src/views/system/clauseManage/index.vue
@@ -33,7 +33,7 @@
<el-table-column label="条款编号" prop="clauseNum" align="center" width="90"/>
<el-table-column label="条款内容" prop="name" align="center" width="150"/>
<!-- <el-table-column label="审核要点" prop="points" align="center"/>-->
- <el-table-column label="审核要点" prop="points" align="center" >
+ <el-table-column label="审核要点" prop="points" align="left" header-align="center" >
<template #default="scope">
<div v-html="scope.row.points" ></div>
</template>
--
Gitblit v1.9.2