| | |
| | | |
| | | <div class="orgTreeBox" id="org-tree-container"> |
| | | <vue3-tree-org |
| | | :data="deptList" |
| | | :data="deptTree" |
| | | :horizontal="false" |
| | | :props="treeProps" |
| | | :toolBar="tools" |
| | |
| | | <el-form-item label="文件状态:" prop="fileStatus"> |
| | | <el-input v-model.trim="dialogForm.fileStatus" placeholder="文件状态"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="发布号:" prop="grantNum"> |
| | | <el-input v-model.trim="dialogForm.grantNum" placeholder="发布号"></el-input> |
| | | <el-form-item label="发放号:" prop="grantNum"> |
| | | <el-input v-model.trim="dialogForm.grantNum" placeholder="发放号"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="编制:" prop="fictionName"> |
| | | <el-select clearable v-model="dialogForm.fictionName" filterable placeholder="编制" style="width: 100%"> |
| | |
| | | children: [] |
| | | }, |
| | | treeProps: { |
| | | label: 'deptName' |
| | | label: 'label' |
| | | }, |
| | | tools: { |
| | | scale: false, restore: false, expand: false, zoom: false, fullscreen: false |
| | |
| | | executionDate: '' |
| | | }, |
| | | formRules: {}, |
| | | userList: [] |
| | | userList: [], |
| | | deptTree: { |
| | | id: 0, |
| | | label: "", |
| | | children: [] |
| | | } |
| | | }); |
| | | |
| | | const { |
| | |
| | | dialogVisible, |
| | | dialogForm, |
| | | formRules, |
| | | userList |
| | | userList, |
| | | deptTree |
| | | } = toRefs(data); |
| | | const userInfo = ref() |
| | | const formRef = ref() |
| | |
| | | if (res.code == 200) { |
| | | data.originDeptList = JSON.parse(JSON.stringify(res.data)) |
| | | data.deptList.deptName = val.companyName |
| | | data.deptTree.label = val.companyName |
| | | data.deptList.children = proxy.handleTree(res.data, "deptId") |
| | | } else { |
| | | ElMessage.warning(res.message) |
| | |
| | | loading.value = false |
| | | return Promise.reject(new Error('该企业暂无质量数据')) |
| | | } |
| | | data.deptTree.children = res.data.treeSelects || [] |
| | | data.companyInfo.summaries = res.data.companySummaries ? res.data.companySummaries[0]?.companySummary : [] |
| | | data.companyInfo.policies = res.data.companyQualityPolicies ? res.data.companyQualityPolicies[0]?.policy : [] |
| | | const duties = transToTableData(res.data.sysFunctionalDistributions, data.originDeptList) |
| | |
| | | </script> |
| | | <style lang="scss"> |
| | | .orgTreeBox { |
| | | width: 700px; |
| | | height: 700px; |
| | | width: 1200px; |
| | | height: 1200px; |
| | | position: absolute; /* 或 fixed */ |
| | | left: -9999px; /* 移出可视区域 */ |
| | | pointer-events: none; /* 禁止交互 */ |
| | |
| | | <!-- placeholder="请选择离职时间"--> |
| | | <!-- />--> |
| | | <!-- </el-form-item>--> |
| | | <el-form-item label="密码:" prop="password" v-if="state.title == '新增' || state.title == '修改密码'"> |
| | | <el-input v-model.trim="state.form.password" type="password" show-password placeholder="请输入密码"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="重复密码:" prop="confirmPassword" v-if="state.title == '新增' || state.title == '修改密码'"> |
| | | <el-input v-model.trim="state.form.confirmPassword" type="password" show-password placeholder="请输入确认密码"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="手机号:" prop="phone" v-if="state.title !== '修改密码'" > |
| | | <el-input v-model.trim="state.form.phone" :maxlength="11" :disabled="disabled" placeholder="请输入手机号"></el-input> |
| | | </el-form-item> |
| | |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="密码:" prop="password" v-if="state.title == '新增' || state.title == '修改密码'"> |
| | | <el-input v-model.trim="state.form.password" type="password" show-password placeholder="请输入密码"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="密码:" v-else> |
| | | <el-input v-model.trim="state.form.password" type="password" show-password placeholder="请输入密码"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="重复密码:" prop="confirmPassword" v-if="state.title == '新增' || state.title == '修改密码'"> |
| | | <el-input v-model.trim="state.form.confirmPassword" type="password" show-password placeholder="请输入确认密码"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="重复密码:" v-else> |
| | | <el-input v-model.trim="state.form.confirmPassword" type="password" show-password placeholder="请输入确认密码"></el-input> |
| | | </el-form-item> |
| | | </el-form> |
| | | <template #footer v-if="state.title !='查看'"> |
| | | <span class="dialog-footer"> |
| | |
| | | |
| | | |
| | | const equalToPassword = (rule, value, callback) => { |
| | | if (state.form.password !== value) { |
| | | callback(new Error("两次输入的密码不一致")); |
| | | } else { |
| | | callback(); |
| | | } |
| | | if (state.form.password !== value) { |
| | | callback(new Error("两次输入的密码不一致")); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }; |
| | | |
| | | const validateUserPhone = (rule, value, callback)=>{ |
| | |
| | | } |
| | | |
| | | let validatePwd = (rule, value, callback)=>{ |
| | | if(value === ''){ |
| | | callback(new Error('请输入密码')) |
| | | }else{ |
| | | if(!verifyPwd(value)){ |
| | | callback(new Error('密码须包含字母、数字、特殊字符,长度在6-16之间')) |
| | | if(value === ''){ |
| | | callback(new Error('请输入密码')) |
| | | }else{ |
| | | callback() |
| | | if(!verifyPwd(value)){ |
| | | callback(new Error('密码须包含字母、数字、特殊字符,长度在6-16之间')) |
| | | }else{ |
| | | callback() |
| | | } |
| | | } |
| | | } |
| | | } |
| | | const startUsername = ref(''); |
| | | const validateUsername = (rule, value, callback)=>{ |
| | |
| | | <el-upload accept=".doc,.docx,.pdf,.xlsx,.xls" :action="state.uploadUrl" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile)" :on-exceed="showTip" :limit='state.fileLimit' v-model:file-list="state.fileList" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles)" > |
| | | <el-button type="primary">点击上传</el-button> |
| | | <template #tip> |
| | | <div class="el-upload__tip">支持上传.doc、.docx、.pdf、.xlsx、.xls格式文档,尺寸小于30M,最多可上传1份</div> |
| | | <div class="el-upload__tip">支持上传.doc、.docx、.pdf、.xlsx、.xls格式文档,尺寸小于50M,最多可上传1份</div> |
| | | </template> |
| | | </el-upload> |
| | | </el-form-item> |
| | |
| | | }); |
| | | } |
| | | const picSize = async (rawFile) => { |
| | | if(rawFile.size / 1024 / 1024 > 30){ |
| | | if(rawFile.size / 1024 / 1024 > 50){ |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: '文件大小不能超过30M' |
| | | message: '文件大小不能超过50M' |
| | | }); |
| | | return false |
| | | } |
| | |
| | | <div class="process-list" v-if="flowList && flowList.length>0"> |
| | | <div class="process-item" v-for="process in flowList" :key="process.id"> |
| | | <div class="process-info" @click="openDetail(process)"> |
| | | <span class="process-status" :class="{processing: process.type == 1,pending: process.type == 2,success: process.type == 3,normal: process.type == 4,seal: process.type == 5}"> |
| | | {{process.type == 1? '内审实施计划':process.type == 2? '培训计划':process.type == 3? '项目评审':process.type == 4?'年度检定计划':process.type == 5?'用章审批(申请)': '用章审批(待审批)'}} |
| | | <span class="process-status" :class="{processing: process.type == 1,pending: process.type == 2,success: process.type == 3,normal: process.type == 4,seal: process.type == 5,normal: process.type == 6}"> |
| | | {{process.type == 1? '内审实施计划':process.type == 2? '培训计划':process.type == 3? '项目评审':process.type == 4?'年度检定计划':process.type == 5?'用章审批(申请)': process.type == 6? '用章审批(待审批)': '颁布令'}} |
| | | </span> |
| | | <span class="process-name">{{process.title}}</span> |
| | | </div> |
| | |
| | | > |
| | | <div class="card-content"> |
| | | <div class="system-icon"> |
| | | <el-image v-if="getActualIndex(index) == 0" :src="system.platformPic"/> |
| | | <el-image v-else :src="picUrl + system.platformPic"/> |
| | | <el-image :src="picUrl + system.platformPic"/> |
| | | </div> |
| | | <h3>{{ system.platformName }}</h3> |
| | | </div> |