Compare commits

..

4 Commits

Author SHA1 Message Date
3edbe328bf 更新 2025-09-26 17:09:01 +08:00
1ceaa76e5f 更新人员 2025-09-26 16:59:48 +08:00
2c41664fe8 更新 2025-09-26 16:55:18 +08:00
39177fbd7d 更新 2025-09-26 16:08:38 +08:00
98 changed files with 659 additions and 402 deletions

View File

@ -1,4 +1,114 @@
<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><meta content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0" name="viewport"><link rel="icon" href="favicon.ico"><title>公安</title><script src="./pgis/eliMapboxgl.min.js"></script><script src="./static/js/huaweiSDK/ICPSDK_ALL.js" id="icpsdk-script"></script><script src="./static/js/huaweiSDK/yuv-player.js"></script><script src="./static/js/huaweiSDK/UMP_JS_SDK.js"></script><script src="./static/js/huaweiSDK/jquery.min.js"></script><script src="./static/js/huaweiSDK/sha256.min.js"></script><script src="./static/js/huaweiSDK/rh.js"></script><link rel="stylesheet" href="./static/js/huaweiSDK/UMP_JS_SDK.css"><link href="static/css/chunk-0ecec341.b8ae026e.css" rel="prefetch"><link href="static/css/chunk-1143165c.e71014f7.css" rel="prefetch"><link href="static/css/chunk-170bf3d6.51ab40e2.css" rel="prefetch"><link href="static/css/chunk-1bc9d765.97aa19d6.css" rel="prefetch"><link href="static/css/chunk-1cd8f6ee.0c8acc72.css" rel="prefetch"><link href="static/css/chunk-1f677e9b.6728e3f2.css" rel="prefetch"><link href="static/css/chunk-2a803a5c.a9ac2046.css" rel="prefetch"><link href="static/css/chunk-3afaafac.949bbeba.css" rel="prefetch"><link href="static/css/chunk-3c0299fb.7e0ee8e9.css" rel="prefetch"><link href="static/css/chunk-3d4f7746.e43806d8.css" rel="prefetch"><link href="static/css/chunk-4383e485.f0e82f8f.css" rel="prefetch"><link href="static/css/chunk-46b16446.b86cbf54.css" rel="prefetch"><link href="static/css/chunk-48ee0a14.38bceb5f.css" rel="prefetch"><link href="static/css/chunk-4dd10e5d.eb2f88f7.css" rel="prefetch"><link href="static/css/chunk-62fd4e5a.ae27d296.css" rel="prefetch"><link href="static/css/chunk-728fde9c.ad9c5372.css" rel="prefetch"><link href="static/css/chunk-8ced575a.609db79b.css" rel="prefetch"><link href="static/css/chunk-b05625e6.af2171dc.css" rel="prefetch"><link href="static/css/chunk-e0dbb6ee.6564ee0c.css" rel="prefetch"><link href="static/css/chunk-fb6ca218.d1759f63.css" rel="prefetch"><link href="static/js/chunk-0ecec341.39ac8749.js" rel="prefetch"><link href="static/js/chunk-1143165c.0aa04a19.js" rel="prefetch"><link href="static/js/chunk-170bf3d6.f6bfac60.js" rel="prefetch"><link href="static/js/chunk-1bc9d765.ff44b1a1.js" rel="prefetch"><link href="static/js/chunk-1cd8f6ee.b91c2408.js" rel="prefetch"><link href="static/js/chunk-1f677e9b.0aad2cbf.js" rel="prefetch"><link href="static/js/chunk-2a803a5c.bfecab09.js" rel="prefetch"><link href="static/js/chunk-2d22bd3e.546119e4.js" rel="prefetch"><link href="static/js/chunk-3afaafac.ab47f5e1.js" rel="prefetch"><link href="static/js/chunk-3c0299fb.e4496ee1.js" rel="prefetch"><link href="static/js/chunk-3d4f7746.3aaf42f6.js" rel="prefetch"><link href="static/js/chunk-4383e485.7a72bb71.js" rel="prefetch"><link href="static/js/chunk-46b16446.fed701ae.js" rel="prefetch"><link href="static/js/chunk-48ee0a14.95469500.js" rel="prefetch"><link href="static/js/chunk-4dd10e5d.befab8bb.js" rel="prefetch"><link href="static/js/chunk-62fd4e5a.1dd65e67.js" rel="prefetch"><link href="static/js/chunk-728fde9c.9acaebd5.js" rel="prefetch"><link href="static/js/chunk-74a8285d.5f715b5d.js" rel="prefetch"><link href="static/js/chunk-8ced575a.c122b485.js" rel="prefetch"><link href="static/js/chunk-b05625e6.cc1ad608.js" rel="prefetch"><link href="static/js/chunk-e0dbb6ee.0c62410a.js" rel="prefetch"><link href="static/js/chunk-fb6ca218.188fd597.js" rel="prefetch"><link href="static/css/app.fc581dae.css" rel="preload" as="style"><link href="static/css/chunk-vendors.b02a6070.css" rel="preload" as="style"><link href="static/js/app.3061d28b.js" rel="preload" as="script"><link href="static/js/chunk-vendors.39c8cdc5.js" rel="preload" as="script"><link href="static/css/chunk-vendors.b02a6070.css" rel="stylesheet"><link href="static/css/app.fc581dae.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but 公安 doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script>document.documentElement.addEventListener( <!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0" name="viewport">
<link rel="icon" href="favicon.ico">
<title>公安</title>
<script src="./pgis/eliMapboxgl.min.js"></script>
<script src="./static/js/huaweiSDK/ICPSDK_ALL.js" id="icpsdk-script"></script>
<script src="./static/js/huaweiSDK/yuv-player.js"></script>
<script src="./static/js/huaweiSDK/UMP_JS_SDK.js"></script>
<script src="./static/js/huaweiSDK/jquery.min.js"></script>
<script src="./static/js/huaweiSDK/sha256.min.js"></script>
<script src="./static/js/huaweiSDK/rh.js"></script>
<link rel="stylesheet" href="./static/js/huaweiSDK/UMP_JS_SDK.css">
<link href="static/css/chunk-02ea15eb.5d1ba452.css" rel="prefetch">
<link href="static/css/chunk-0f17ea4c.dbdf7f70.css" rel="prefetch">
<link href="static/css/chunk-10e8c77b.dab97cde.css" rel="prefetch">
<link href="static/css/chunk-10ed8ea9.c2ecca74.css" rel="prefetch">
<link href="static/css/chunk-15d0e086.3385f8b0.css" rel="prefetch">
<link href="static/css/chunk-21841a4c.6eedf75b.css" rel="prefetch">
<link href="static/css/chunk-241e82d7.11096406.css" rel="prefetch">
<link href="static/css/chunk-2779e5eb.db818b95.css" rel="prefetch">
<link href="static/css/chunk-28bd6e9c.ec6f1955.css" rel="prefetch">
<link href="static/css/chunk-372656a2.7ea38cd5.css" rel="prefetch">
<link href="static/css/chunk-39279eb6.47081a90.css" rel="prefetch">
<link href="static/css/chunk-4774d9b1.73bbab57.css" rel="prefetch">
<link href="static/css/chunk-48f37632.e15ef6a9.css" rel="prefetch">
<link href="static/css/chunk-4c926d2e.1e67e869.css" rel="prefetch">
<link href="static/css/chunk-4f09d58d.4f2a4e43.css" rel="prefetch">
<link href="static/css/chunk-54786492.26254a10.css" rel="prefetch">
<link href="static/css/chunk-558ea50e.acd6d3dc.css" rel="prefetch">
<link href="static/css/chunk-57f05a75.0e9fcd50.css" rel="prefetch">
<link href="static/css/chunk-592f86a8.7639f8b4.css" rel="prefetch">
<link href="static/css/chunk-5c230de9.d70eece9.css" rel="prefetch">
<link href="static/css/chunk-61c2abd0.7cab76a0.css" rel="prefetch">
<link href="static/css/chunk-64071f66.7664b082.css" rel="prefetch">
<link href="static/css/chunk-672bf274.c108c937.css" rel="prefetch">
<link href="static/css/chunk-67f4379d.f6e72cab.css" rel="prefetch">
<link href="static/css/chunk-6800f11d.2b4cf43e.css" rel="prefetch">
<link href="static/css/chunk-6e522fb9.6cfce2cb.css" rel="prefetch">
<link href="static/css/chunk-7520a17b.73e7e2a4.css" rel="prefetch">
<link href="static/css/chunk-75f40ec2.2b41afa6.css" rel="prefetch">
<link href="static/css/chunk-90c83dd2.8e9f89e9.css" rel="prefetch">
<link href="static/css/chunk-93fe6126.8d6c2235.css" rel="prefetch">
<link href="static/css/chunk-a070c67c.f8ac0fdc.css" rel="prefetch">
<link href="static/css/chunk-a27ffb7a.dd217f70.css" rel="prefetch">
<link href="static/css/chunk-a37f0b78.12c4a7fe.css" rel="prefetch">
<link href="static/css/chunk-a3e767b2.860cd9bd.css" rel="prefetch">
<link href="static/css/chunk-ba27d1c8.6564ee0c.css" rel="prefetch">
<link href="static/css/chunk-c7fd54ae.c9072fa4.css" rel="prefetch">
<link href="static/css/chunk-d1e3636c.0d485642.css" rel="prefetch">
<link href="static/css/chunk-f32658c8.ce509732.css" rel="prefetch">
<link href="static/css/chunk-f49f1524.81c36cdb.css" rel="prefetch">
<link href="static/js/chunk-02ea15eb.c87f99b8.js" rel="prefetch">
<link href="static/js/chunk-0f17ea4c.3c6d2b4d.js" rel="prefetch">
<link href="static/js/chunk-10e8c77b.8d8eb13c.js" rel="prefetch">
<link href="static/js/chunk-10ed8ea9.d37c1017.js" rel="prefetch">
<link href="static/js/chunk-15d0e086.7868e37c.js" rel="prefetch">
<link href="static/js/chunk-21841a4c.0d58fd95.js" rel="prefetch">
<link href="static/js/chunk-241e82d7.0c8f1468.js" rel="prefetch">
<link href="static/js/chunk-2779e5eb.c4f9ca8f.js" rel="prefetch">
<link href="static/js/chunk-28bd6e9c.999dd919.js" rel="prefetch">
<link href="static/js/chunk-2d0daeb7.dead7cf1.js" rel="prefetch">
<link href="static/js/chunk-2d22bd3e.15e249c6.js" rel="prefetch">
<link href="static/js/chunk-2d22c2b1.81990dbe.js" rel="prefetch">
<link href="static/js/chunk-372656a2.a8d6170e.js" rel="prefetch">
<link href="static/js/chunk-39279eb6.b059ed1d.js" rel="prefetch">
<link href="static/js/chunk-4774d9b1.19933216.js" rel="prefetch">
<link href="static/js/chunk-48f37632.306868d1.js" rel="prefetch">
<link href="static/js/chunk-4c926d2e.1522bc9f.js" rel="prefetch">
<link href="static/js/chunk-4f09d58d.13d30215.js" rel="prefetch">
<link href="static/js/chunk-54786492.36c69fcb.js" rel="prefetch">
<link href="static/js/chunk-558ea50e.459f315e.js" rel="prefetch">
<link href="static/js/chunk-57f05a75.c26dfd59.js" rel="prefetch">
<link href="static/js/chunk-592f86a8.22e71f2b.js" rel="prefetch">
<link href="static/js/chunk-5c230de9.d8feeead.js" rel="prefetch">
<link href="static/js/chunk-61c2abd0.7ef3717c.js" rel="prefetch">
<link href="static/js/chunk-64071f66.a37f5070.js" rel="prefetch">
<link href="static/js/chunk-672bf274.d76e96df.js" rel="prefetch">
<link href="static/js/chunk-67f4379d.efe6607f.js" rel="prefetch">
<link href="static/js/chunk-6800f11d.ec866097.js" rel="prefetch">
<link href="static/js/chunk-6e522fb9.21e168bc.js" rel="prefetch">
<link href="static/js/chunk-7520a17b.8f921447.js" rel="prefetch">
<link href="static/js/chunk-75f40ec2.e207f3d9.js" rel="prefetch">
<link href="static/js/chunk-90c83dd2.960474a3.js" rel="prefetch">
<link href="static/js/chunk-93fe6126.d4e473f2.js" rel="prefetch">
<link href="static/js/chunk-a070c67c.82f2b932.js" rel="prefetch">
<link href="static/js/chunk-a27ffb7a.cee589f3.js" rel="prefetch">
<link href="static/js/chunk-a37f0b78.eb20ec3c.js" rel="prefetch">
<link href="static/js/chunk-a3e767b2.38a6f18f.js" rel="prefetch">
<link href="static/js/chunk-ba27d1c8.599705f5.js" rel="prefetch">
<link href="static/js/chunk-c7fd54ae.c476a3e8.js" rel="prefetch">
<link href="static/js/chunk-d1e3636c.f5b996fc.js" rel="prefetch">
<link href="static/js/chunk-f32658c8.c11aa1aa.js" rel="prefetch">
<link href="static/js/chunk-f49f1524.19a34f0a.js" rel="prefetch">
<link href="static/css/app.fc581dae.css" rel="preload" as="style">
<link href="static/css/chunk-vendors.b02a6070.css" rel="preload" as="style">
<link href="static/js/app.38b42200.js" rel="preload" as="script">
<link href="static/js/chunk-vendors.3e89d9d5.js" rel="preload" as="script">
<link href="static/css/chunk-vendors.b02a6070.css" rel="stylesheet">
<link href="static/css/app.fc581dae.css" rel="stylesheet">
</head>
<body><noscript><strong>We're sorry but 公安 doesn't work properly without JavaScript enabled. Please enable it to
continue.</strong></noscript>
<div id="app"></div>
<script>document.documentElement.addEventListener(
"touchmove", "touchmove",
function (event) { function (event) {
if (event.touches.length > 1) { if (event.touches.length > 1) {
@ -6,4 +116,9 @@
} }
}, },
false false
);</script><script src="static/js/chunk-vendors.39c8cdc5.js"></script><script src="static/js/app.3061d28b.js"></script></body></html> );</script>
<script src="static/js/chunk-vendors.3e89d9d5.js"></script>
<script src="static/js/app.38b42200.js"></script>
</body>
</html>

View File

@ -0,0 +1 @@
.sso-redirect-container[data-v-2742f068]{display:flex;justify-content:center;align-items:center;height:100vh;background-color:#f5f5f5}.loading-wrapper[data-v-2742f068]{text-align:center}.loading-text[data-v-2742f068]{font-size:16px;color:#666;margin-top:20px}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-02ea15eb"],{"0918":function(e,t,c){"use strict";c.r(t);var o=c("7a23"),n=c("6605"),s=c("5d2d");const a=e=>(Object(o["pushScopeId"])("data-v-2742f068"),e=e(),Object(o["popScopeId"])(),e),d={class:"sso-redirect-container"},r=a(()=>Object(o["createElementVNode"])("div",{class:"loading-wrapper"},[Object(o["createElementVNode"])("div",{class:"loading-text"},"正在跳转...")],-1)),i=[r];var p={__name:"sso_redirect",setup(e){const t=Object(n["c"])(),c=Object(n["d"])(),a=()=>t.query.url||"",r=()=>{const e=a(),t=Object(s["a"])("SSOTOKEN")||Object(s["a"])("token");t?e?c.push(e):c.push("/"):(Object(s["d"])("FounderUrl",e),window.location.href="http://localhost:8006/mosty-base/fzSsoLogin")};return Object(o["onMounted"])(()=>{r()}),(e,t)=>(Object(o["openBlock"])(),Object(o["createElementBlock"])("div",d,i))}},b=(c("28ac"),c("6b0d")),u=c.n(b);const l=u()(p,[["__scopeId","data-v-2742f068"]]);t["default"]=l},"28ac":function(e,t,c){"use strict";c("8e7d")},"8e7d":function(e,t,c){}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d0daeb7"],{"6e3e":function(e,c,t){"use strict";t.r(c);var n=t("7a23"),o=t("6605"),u=t("5502"),b=(t("c5cb"),{__name:"publicPage",setup(e){const c=Object(u["b"])(),t=Object(o["c"])(),b=Object(o["d"])();Object(n["onMounted"])(()=>{let e=t.query.clientKey;e&&s(e)});const s=e=>{c.dispatch("user/Fzlogin",e).then(e=>{b.push(t.query.url)})};return(e,c)=>(Object(n["openBlock"])(),Object(n["createElementBlock"])("div"))}});const s=b;c["default"]=s}}]);

View File

@ -0,0 +1 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-2d22bd3e"],{f141:function(e,t,n){"use strict";n.r(t);var o=n("7a23"),c=n("5502"),u=n("6605"),l=n("5d2d"),r={__name:"oatuh_login",setup(e){const t=Object(o["ref"])(!1),n=Object(o["ref"])([]),r=Object(c["b"])(),a=Object(u["d"])();function d(){const e=Object(u["c"])();let t=e.query.token||null;null!=t?(t=t.replace(/\ +/g,""),Object(l["d"])("SSOTOKEN",t),s({token:t})):window.location.href="http://155.240.22.188:9020"}const s=e=>{r.dispatch("user/oatuhLogin",e).then(e=>{const o=Object(l["a"])("FounderUrl")||"/";console.log(o,"FounderUrl"),1===e.deptList.length?(Object(l["c"])("FounderUrl"),a.push(o)):(n.value=[...e.deptList],t.value=!0,authorization.value=e.jwtToken)})};return Object(o["onMounted"])(()=>{d()}),(e,t)=>null}};const a=r;t["default"]=a}}]);

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -149,13 +149,10 @@ const handleNum = (val) => {
watch(() => props.modelValue, (newVal) => { watch(() => props.modelValue, (newVal) => {
listQuery.value = newVal; //赋值 listQuery.value = newVal; //赋值
console.log(newVal,'===newVal');
}, { immediate: true, deep: true }); }, { immediate: true, deep: true });
watch(() => listQuery.value, (newVal) => { watch(() => listQuery.value, (newVal) => {
emits('update:modelValue', newVal) emits('update:modelValue', newVal)
console.log(newVal,'===newVal111');
}, { immediate: true, deep: true }); }, { immediate: true, deep: true });
defineExpose({ submit, reset }); defineExpose({ submit, reset });

View File

@ -1,17 +1,24 @@
<template> <template>
<div style="width: 100%"> <div style="width: 100%" :class="getConfiger.showSelectType === 'radio' ? 'tabBoxRadio' : ''">
<!-- hasChildren要在tableData中定义表示当前行有没有下一级 children要在tableData中定义表示下一级的数据--> <!-- hasChildren要在tableData中定义表示当前行有没有下一级 children要在tableData中定义表示下一级的数据-->
<el-table ref="multipleTableRef" :data="tableData" @selection-change="handleSelectionChange" <el-table
@current-change="handleCurrentChange" @row-click="singleElection" :row-key="getConfiger.rowKey" ref="multipleTableRef"
:border="getConfiger.border" :default-expand-all="getConfiger.defaultExpandAll" :stripe="getConfiger.stripe" :data="tableData"
:height="tableHeight" v-loading="tableConfiger.loading" :lazy="getConfiger.lazy" :load="load" @selection-change="handleSelectionChange"
:tree-props="treePros" style="width: 100%" :header-cell-class-name="() => 'HeadBgColor'" :row-key="getConfiger.rowKey"
:border="getConfiger.border"
:default-expand-all="getConfiger.defaultExpandAll"
:stripe="getConfiger.stripe"
:height="tableHeight"
v-loading="tableConfiger.loading"
:lazy="getConfiger.lazy"
:load="load"
:tree-props="treePros"
style="width: 100%"
:header-cell-class-name="() => 'HeadBgColor'"
:highlight-current-row="getConfiger.showSelectType === 'radio'" :highlight-current-row="getConfiger.showSelectType === 'radio'"
:row-style="{ height: getConfiger.rowHeight === 'auto' ? getConfiger.rowHeight : getConfiger.rowHeight + 'px' }"> :row-style="{ height: getConfiger.rowHeight === 'auto' ? getConfiger.rowHeight : getConfiger.rowHeight + 'px' }">
<el-table-column type="selection" width="55" v-if="getConfiger.showSelectType === 'checkBox'" /> <el-table-column style="width: 55px" type="selection" width="55" v-if="getConfiger.showSelectType" :class="getConfiger.showSelectType === 'radio' ? 'tabBoxRadio' : ''" />
<el-table-column width="55" v-else-if="getConfiger.showSelectType === 'radio'" #default="{ row }">
<el-radio class="radio" v-model="getConfiger.radioChoose" :label="row[getConfiger.rowKey]">&nbsp;</el-radio>
</el-table-column>
<el-table-column type="index" label="序号" v-if="getConfiger.showIndex" width="60" :align="getConfiger?.align" /> <el-table-column type="index" label="序号" v-if="getConfiger.showIndex" width="60" :align="getConfiger?.align" />
<el-table-column v-for="(item, index) in tableColumn" :align="getConfiger?.align" :prop="item.prop" :key="index" <el-table-column v-for="(item, index) in tableColumn" :align="getConfiger?.align" :prop="item.prop" :key="index"
:label="item.label" :width="item.width" style="width: 100%; font-size: 14px" :label="item.label" :width="item.width" style="width: 100%; font-size: 14px"
@ -25,11 +32,12 @@
{{ row[item.prop] }} {{ row[item.prop] }}
</template> </template>
</el-table-column> </el-table-column>
<!-- 操作 --> <!-- 操作 -->
<el-table-column v-if="getConfiger.haveControls" :fixed="fixed" :label="getConfiger.controls" <el-table-column v-if="getConfiger.haveControls" :fixed="fixed" :label="getConfiger.controls"
:width="controlsWidth" :align="getConfiger?.align"> :width="controlsWidth" :align="getConfiger?.align">
<template #default="scope"> <template #default="scope">
<slot name="controls" v-bind="scope" :index="scope.$index"></slot> <slot name="controls" v-bind="scope"></slot>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -58,7 +66,7 @@ const props = defineProps({
default: 180 default: 180
}, },
tableHeight: { tableHeight: {
type: Number type: Number || String
}, },
treePros: { treePros: {
type: Object, type: Object,
@ -95,8 +103,6 @@ let getConfiger = reactive({
}); });
watchEffect(() => { watchEffect(() => {
getConfiger = { ...getConfiger, ...props.tableConfiger }; getConfiger = { ...getConfiger, ...props.tableConfiger };
console.log(getConfiger,'getConfiger');
setDefaultChoose(); setDefaultChoose();
}); });
onMounted(() => { onMounted(() => {
@ -104,19 +110,16 @@ onMounted(() => {
}); });
// 可选的时候选择的数据 // 可选的时候选择的数据
const handleSelectionChange = (val) => { const handleSelectionChange = (val) => {
emit("chooseData", val); if (getConfiger.showSelectType === 'radio' && val.length > 1) {
}; let del_row = val.shift();
// 单选的时候选择的数据 multipleTableRef.value.toggleRowSelection(del_row, false);
const handleCurrentChange = (val) => { currentRow.value = val;
currentRow.value = val; emit("chooseData", val);
emit("chooseData", val); } else {
};
const singleElection = (val) => {
if (getConfiger.showSelectType === "radio") {
getConfiger.radioChoose = val[getConfiger.rowKey];
emit("chooseData", val); emit("chooseData", val);
} }
}; };
// 懒加载数据的方法 // 懒加载数据的方法
const load = (date, treeNode, resolve) => { const load = (date, treeNode, resolve) => {
setTimeout(() => { setTimeout(() => {
@ -140,29 +143,27 @@ const load = (date, treeNode, resolve) => {
function setDefaultChoose() { function setDefaultChoose() {
nextTick(() => { nextTick(() => {
// 多选的默认选中 // 多选的默认选中
if ( if (props.tableConfiger.defaultSelectKeys?.length > 0 && props.tableConfiger.showSelectType === "checkBox") {
props.tableConfiger.defaultSelectKeys?.length > 0 &&
props.tableConfiger.showSelectType === "checkBox"
) {
props.tableData.forEach((item) => { props.tableData.forEach((item) => {
if ( if (props.tableConfiger.defaultSelectKeys.findIndex((v) => v === item[props.tableConfiger.rowKey]) > -1) {
props.tableConfiger.defaultSelectKeys.findIndex(
(v) => v === item[props.tableConfiger.rowKey]
) > -1
) {
multipleTableRef.value.toggleRowSelection(item, true); multipleTableRef.value.toggleRowSelection(item, true);
} }
}); });
// 单选的默认选中 // 单选的默认选中
} else if ( } else if (props.tableConfiger.defaultSelectKeys && props.tableConfiger.defaultSelectKeys?.length > 0 && props.tableConfiger.showSelectType === "radio") {
props.tableConfiger.defaultSelectKeys &&
props.tableConfiger.defaultSelectKeys?.length > 0 &&
props.tableConfiger.showSelectType === "radio"
) {
getConfiger.radioChoose = props.tableConfiger.defaultSelectKeys[0]; getConfiger.radioChoose = props.tableConfiger.defaultSelectKeys[0];
} }
}); });
} }
</script> </script>
<style lang="scss">
<style lang="scss"></style>
<style>
.tabBoxRadio .el-checkbox__inner {
border-radius: 50% !important;
}
.tabBoxRadio .el-table__header-wrapper .el-checkbox {
display: none;
}
</style> </style>

View File

@ -37,7 +37,6 @@ const router = useRouter();
onMounted(() => { onMounted(() => {
deptName.value = localStorage.getItem("deptId") ? JSON.parse(localStorage.getItem("deptId"))[0].deptName : '' deptName.value = localStorage.getItem("deptId") ? JSON.parse(localStorage.getItem("deptId"))[0].deptName : ''
}) })
const active = ref(""); const active = ref("");
onMounted(() => { onMounted(() => {
//登陆用户信息 //登陆用户信息

View File

@ -9,12 +9,6 @@ import display from './modules/display';
import getters from './getters'; import getters from './getters';
export default createStore({ export default createStore({
// state: {
// },
// mutations: {
// },
// actions: {
// },
getters, getters,
modules: { modules: {
user, user,

View File

@ -1,32 +1,10 @@
import { import {login,getUserInfo,getKaptcha,refreshToken,loginOut,Fzlogin } from "@/api/sys";
login, import { unifiedLogin } from "@/api/user-manage";
getUserInfo,
getKaptcha,
refreshToken,
loginOut,
Fzlogin
} from "@/api/sys";
import {
unifiedLogin
} from "@/api/user-manage";
import Base64 from "base-64"; import Base64 from "base-64";
import { import { setItem, getItem, removeAllItem } from "@/utils/storage";
setItem, import { TOKEN } from "@/constant";
getItem, import router, { resetRouter } from "@/router";
removeAllItem import { setTimeStamp } from "@/utils/auth";
} from "@/utils/storage";
import {
TOKEN
} from "@/constant";
import router, {
resetRouter
} from "@/router";
import {
setTimeStamp
} from "@/utils/auth";
import {
TAGS_VIEW
} from "@/constant/index.js";
export default { export default {
namespaced: true, namespaced: true,
state: () => ({ state: () => ({
@ -84,18 +62,9 @@ export default {
*登录请求动作 *登录请求动作
*/ */
login(ctx, userInfo) { login(ctx, userInfo) {
const { const { userName, password, kaptcha } = userInfo;
userName,
password,
kaptcha
} = userInfo;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
login({ login({ userName, password: Base64.encode(password), kaptcha }).then((data) => {
userName,
password: Base64.encode(password),
kaptcha
})
.then((data) => {
if (data.deptList.length === 1) { if (data.deptList.length === 1) {
this.commit("user/setToken", data.jwtToken); this.commit("user/setToken", data.jwtToken);
this.commit("user/setDeptId", data.deptList); this.commit("user/setDeptId", data.deptList);
@ -110,10 +79,7 @@ export default {
setItem("idEntityCard", data.idEntityCard); setItem("idEntityCard", data.idEntityCard);
this.commit("user/setUserInfo", { this.commit("user/setUserInfo", {
token: data.jwtToken, token: data.jwtToken,
permission: { permission: { buttonPermission: ["removeTest", "viewTest"],menus: data.menuCodeSet },
buttonPermission: ["removeTest", "viewTest"],
menus: data.menuCodeSet
},
menuList: data.menuList, menuList: data.menuList,
deptList: data.deptList deptList: data.deptList
}); });

View File

@ -15,9 +15,6 @@
</el-form-item> </el-form-item>
<el-form-item prop="password1"> <el-form-item prop="password1">
<!-- <span class="svg-container">
<svg-icon icon="password" />
</span> -->
<el-input placeholder="请输入密码" name="password" :type="passwordType" v-model="loginForm.password"> <el-input placeholder="请输入密码" name="password" :type="passwordType" v-model="loginForm.password">
<template #prepend> <template #prepend>
<span class="svg-container"> <span class="svg-container">
@ -48,8 +45,7 @@
<!---登录按钮--> <!---登录按钮-->
<el-form-item style="height: 49px" v-if="!loginDialog"> <el-form-item style="height: 49px" v-if="!loginDialog">
<el-button @click="handleLogin" type="primary" style="width: 520px; height: 49px" :loading="loading" <el-button @click="handleLogin" type="primary" style="width: 520px; height: 49px" :loading="loading" native-type="submit">登录</el-button>
native-type="submit">登录</el-button>
</el-form-item> </el-form-item>
<el-form-item class="choosedept-wrap" v-if="loginDialog"> <el-form-item class="choosedept-wrap" v-if="loginDialog">
@ -68,6 +64,7 @@ export default {
}; };
</script> </script>
<script setup> <script setup>
import { qcckPost } from "@/api/qcckApi.js";
import { setItem } from "@/utils/storage"; import { setItem } from "@/utils/storage";
import { ElNotification } from "element-plus"; import { ElNotification } from "element-plus";
import * as MOSTY from "@/components/MyComponents/index"; import * as MOSTY from "@/components/MyComponents/index";
@ -100,19 +97,14 @@ const loginRules = ref({
kaptcha: [{ required: true, trigger: "blur", message: "验证码为必填项" }] kaptcha: [{ required: true, trigger: "blur", message: "验证码为必填项" }]
}); });
const handleClose = () => { };
const refreshToken = (e) => { const refreshToken = (e) => {
store store.dispatch("user/refreshToken", { deptId: e, jwtToken: authorization.value }).then((res) => {
.dispatch("user/refreshToken", { deptId: e, jwtToken: authorization.value }) loading.value = false;
.then((res) => { store.commit("user/setDeptId", e);
loading.value = false; router.push("/");
store.commit("user/setDeptId", e); }).catch(() => {
// window.location.href = '/'// 登录后操作 loading.value = false;
router.push("/"); });
})
.catch(() => {
loading.value = false;
});
}; };
// 处理密码框文本显示状态 // 处理密码框文本显示状态
const passwordType = ref("password"); const passwordType = ref("password");
@ -131,44 +123,38 @@ const router = useRouter();
const handleLogin = () => { const handleLogin = () => {
loginFromRef.value.validate((valid) => { loginFromRef.value.validate((valid) => {
if (!valid) return false; if (!valid) return false;
// setItem("token", "1255555888");
// setItem("isOatuh", 0);
// router.push("/");
loading.value = true; loading.value = true;
store store.dispatch("user/login", loginForm.value).then((res) => {
.dispatch("user/login", loginForm.value) loading.value = false;
.then((res) => { if (res.deptList.length === 1) {
loading.value = false; getSfzhByGsid(res.idEntityCard)
// 登录后操作; } else {
if (res.deptList.length === 1) { deptList.value = [...res.deptList];
router.push("/"); loginDialog.value = true;
console.log("xxxxxxx"); authorization.value = res.jwtToken;
ElNotification({ title: "提示", message: "请选择部门", duration: 3000});
// window.location.href = "/"; }
} else { }).catch(() => {
deptList.value = [...res.deptList]; loading.value = false;
loginDialog.value = true; });
authorization.value = res.jwtToken;
ElNotification({
title: "提示",
message: "请选择部门",
duration: 3000
});
}
})
.catch(() => {
loading.value = false;
});
}); });
}; };
const logout = () => { const getSfzhByGsid = (sfzh) => {
store.dispatch("user/logout"); qcckPost({ sfzh }, "/bagl/mosty-base/baxx/cyry/queryBySfzh").then(res=>{
}; if(!res) {
ElNotification({ title: "提示", message: "无访问权限", duration: 3000});
store.dispatch("user/logout");
}else{
let obj = { sfzh:res.sfzh , xm:res.xm , pxgs:res.pxgs , pxgsid:res.pxgsid }
setItem("userInfo", JSON.stringify(obj));
window.location.href = "/";
}
})
}
onMounted(() => { }); onMounted(() => { });
const getKaptchaImg = () => { const getKaptchaImg = () => {
const res = const res = `${process.env.VUE_APP_GATEWAY_BASE_URL}/bagl/mosty-base/kaptcha?date=` + new Date();
`${process.env.VUE_APP_GATEWAY_BASE_URL}/bagl/mosty-base/kaptcha?date=` +
new Date();
kaptchaUrl.value = res; kaptchaUrl.value = res;
}; };
</script> </script>

View File

@ -18,40 +18,25 @@
</template> </template>
<script setup> <script setup>
import { ref, computed, reactive, getCurrentInstance } from 'vue' import * as rule from "@/utils/rules.js";
import { ref, reactive, getCurrentInstance } from 'vue'
import { qcckPost } from "@/api/qcckApi.js"; import { qcckPost } from "@/api/qcckApi.js";
import FormMessage from '@/components/aboutTable/FormMessage.vue' import FormMessage from '@/components/aboutTable/FormMessage.vue'
const { proxy } = getCurrentInstance() const { proxy } = getCurrentInstance()
const { D_BAXX_GWLX } = proxy.$dict("D_BAXX_GWLX") const { D_BAXX_GWLX } = proxy.$dict("D_BAXX_GWLX")
const title = ref('新增培训人员') const title = ref('新增培训人员')
const loading = ref(false) const loading = ref(false)
const disabled = ref(false) const disabled = ref(false)
const FormRef = ref(null) const FormRef = ref(null)
const props = defineProps({ const props = defineProps({
modelValue: {
type: Boolean,
default: false
},
dic: { dic: {
type: Object, type: Object,
default: () => ({}) default: () => ({})
} }
}) })
const formData = ref({})
const emits = defineEmits(['update:modelValue', 'refresh']) const dialogVisible = ref(false)
const emits = defineEmits(['refresh'])
const dialogVisible = computed({
get() {
return props.modelValue
},
set(val) {
emits('update:modelValue', val)
}
})
const formList = reactive([ const formList = reactive([
[ [
{ label: "姓名", prop: "xm", type: "input" }, { label: "姓名", prop: "xm", type: "input" },
@ -74,80 +59,34 @@ const formList = reactive([
{ label: "无犯罪记录证明", prop: "wfzzmjl", type: "upload", limit: 1 }, { label: "无犯罪记录证明", prop: "wfzzmjl", type: "upload", limit: 1 },
] ]
]) ])
const rules = { const rules = {
ryzpzm: [{ required: true, message: "请上传身份证正面", trigger: "change" }], ryzpzm: [{ required: true, message: "请上传身份证正面", trigger: "change" }],
ryzpfm: [{ required: true, message: "请上传身份证反面", trigger: "change" }], ryzpfm: [{ required: true, message: "请上传身份证反面", trigger: "change" }],
tjbg: [{ required: true, message: "请上传体检报告", trigger: "change" }], tjbg: [{ required: true, message: "请上传体检报告", trigger: "change" }],
wfzzmjl: [{ required: true, message: "请上传无犯罪记录证明", trigger: "change" }], wfzzmjl: [{ required: true, message: "请上传无犯罪记录证明", trigger: "change" }],
xm: [{ required: true, message: "请输入姓名", trigger: "change" }], xm: [{ required: true, message: "请输入姓名", trigger: "change" }],
zjhm: [ ...rule.phoneRule({ validator: true,message: "请输入联系电话",require: true }, "lxdh"), // 是否必填 是否进行校验`
{ required: true, message: "请输入证件号码", trigger: "change" }, ...rule.identityCardRule({ validator: true,message: "请输入身份证号" ,require: true}, "zjhm"), // 是否必填 是否进行校验
{
validator: (rule, value, callback) => {
if (!value) {
callback()
} else {
const reg = /^(\d{15}|\d{17}[\dXx])$/;
if (!reg.test(value)) {
callback(new Error("请输入正确的身份证号码"))
} else {
callback()
}
}
}
}
],
lxdh: [
{ required: true, message: "请输入联系电话", trigger: "change" },
{
validator: (rule, value, callback) => {
if (!value) {
callback()
} else {
const reg = /^1[34578]\d{9}$/
if (!reg.test(value)) {
callback(new Error("请输入正确的手机号"))
} else {
callback()
}
}
}
}
],
jzdz: [{ required: true, message: "请输入居住地址", trigger: "change" }], jzdz: [{ required: true, message: "请输入居住地址", trigger: "change" }],
rzsj: [{ required: true, message: "请选择入职时间", trigger: "change" }], rzsj: [{ required: true, message: "请选择入职时间", trigger: "change" }],
pxgs: [{ required: true, message: "请选择所属保安公司", trigger: "change" }], pxgs: [{ required: true, message: "请选择所属保安公司", trigger: "change" }],
gw: [{ required: true, message: "请输入岗位", trigger: "change" }], gw: [{ required: true, message: "请输入岗位", trigger: "change" }],
} }
const formData = ref({})
const close = () => { const close = () => {
FormRef.value?.reset() FormRef.value?.reset()
dialogVisible.value = false dialogVisible.value = false;
} }
const open = (row = {}, type = 'add') => { const open = (row = {}, type = 'add') => {
disabled.value = false
dialogVisible.value = true
const fieldsToSplit = ['ryzpzm', 'ryzpfm', 'tjbg', 'wfzzmjl']; const fieldsToSplit = ['ryzpzm', 'ryzpfm', 'tjbg', 'wfzzmjl'];
fieldsToSplit.forEach(field => { fieldsToSplit.forEach(field => {
row[field] = typeof row[field] === 'string' row[field] = typeof row[field] === 'string' ? row[field].split(',') : row[field];
? row[field].split(',')
: row[field];
}); });
formData.value = { ...row } formData.value = { ...row }
if (type === 'add') { title.value = type === 'add' ? '新增申请人员' : (type === 'upload' ? '上传资料' : '查看详情')
title.value = '新增申请人员' disabled.value = title.value === '查看详情' ? true : false;
} else if (type === 'upload') { dialogVisible.value = true;
title.value = '上传资料'
} else {
disabled.value = true
title.value = '查看详情'
}
} }
// 新增、编辑 // 新增、编辑
@ -155,15 +94,9 @@ const save = () => {
FormRef.value.submit(() => { FormRef.value.submit(() => {
loading.value = true; loading.value = true;
const url = !formData.value?.id ? `/mosty-base/baxx/basq/add` : `/mosty-base/baxx/basq/edit`; const url = !formData.value?.id ? `/mosty-base/baxx/basq/add` : `/mosty-base/baxx/basq/edit`;
const params = { ...formData.value } const params = { ...formData.value }
const fieldsToSplit = ['ryzpzm', 'ryzpfm', 'tjbg', 'wfzzmjl']; const fieldsToSplit = ['ryzpzm', 'ryzpfm', 'tjbg', 'wfzzmjl'];
fieldsToSplit.forEach(field => { fieldsToSplit.forEach(field => { params[field] = params[field] ? params[field].join(',') : ''; });
params[field] = params[field]
? params[field].join(',')
: '';
});
qcckPost(params, url).then(() => { qcckPost(params, url).then(() => {
loading.value = false; loading.value = false;
proxy.$message.success("保存成功"); proxy.$message.success("保存成功");

View File

@ -1,82 +1,101 @@
<template> <template>
<el-dialog class="dialogWerapper" width="30%" v-model="modelValue" :title="title" @close="handleClose"> <el-dialog class="dialogWerapper" width="80%" v-model="visibleDialog" title="选择公司" @close="handleClose">
<form-message ref="FormRef" :disabled="disabled" v-model="formData" :rules="rules" :formList="formList" /> <div>
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData"
>
</MyTable>
</div>
<template #footer> <template #footer>
<el-button type="primary" v-if="!disabled" :loading="loading" @click="handleSubmit">确定</el-button> <div class="flex just-center">
<el-button @click="handleClose">取消</el-button> <el-button type="primary" :loading="loading" @click="handleSubmit">确定</el-button>
<el-button @click="handleClose">取消</el-button>
</div>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
<script setup> <script setup>
import { computed, ref, reactive, getCurrentInstance } from 'vue'; import MyTable from "@/components/aboutTable/MyTable.vue";
import FormMessage from '@/components/aboutTable/FormMessage.vue' import { ref, reactive,getCurrentInstance } from 'vue';
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js"; import { qcckPost } from "@/api/qcckApi.js";
const emits = defineEmits(['refresh']);
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const { D_BAXX_DWLX } = proxy.$dict("D_BAXX_DWLX") const visibleDialog = ref(false);
const props = defineProps({ const pageData = reactive({
modelValue: { tableData: [],
type: Boolean, keyCount: 0,
default: false tableConfiger: {
rowHieght: 61,
showSelectType: "radio",
loading: false,
haveControls:false
}, },
}) tableHeight:500,
pageConfiger: {
const emits = defineEmits(['update:modelValue', 'refresh']) pageSize: 20,
pageCurrent: 1
const visible = computed({
get() {
return props.modelValue
}, },
set(val) { controlsWidth: 180,
emits('update:modelValue', val) tableColumn: [
} { label: "单位名称", prop: "dwmc" },
}) { label: "信用代码", prop: "xydm" },
{ label: "场所名称", prop: "csmc" },
{ label: "场所电话", prop: "csLxdh" }
]
});
const title = ref('选择培训公司')
const loading = ref(false)
const disabled = ref(false)
const FormRef = ref(null)
const formData = ref({}) const formData = ref({})
const loading = ref(false)
const formList = reactive([
[
{ label: "培训公司", prop: "pxgs", type: "select", options: D_BAXX_DWLX },
],
])
const rules = {
pxgs: [{ required: true, message: "请选择培训公司", trigger: "change" }],
}
const open = (row = {}, type = 'updata') => {
visible.value = true
disabled.value = false
formData.value = { ...row }
}
const handleClose = () => { const handleClose = () => {
FormRef.value?.reset() formData.value = {};
visible.value = false visibleDialog.value = false;
}
const chooseData = (row) => {
formData.value.pxgsdm = row[0].id;
formData.value.pxgsid = row[0].id;
formData.value.pxgs = row[0].dwmc;
} }
const handleSubmit = async () => { const handleSubmit = async () => {
try { if(!formData.value.pxgsid) return proxy.$message.error('请选择公司');
loading.value = true loading.value = true;
await FormRef.value.submit(async () => { let data = { ...formData.value }
await qcckPost({ ...formData.value }, `/bagl/mosty-base/baxx/basq/edit`) data.sfzh = data.zjhm;
proxy.$message.success('培训公司保存成功') await qcckPost(data, `/mosty-base/baxx/basq/edit`)
emits('refresh') await qcckPost(data, `/mosty-base/baxx/pxry/add`)
visible.value = false loading.value = false
}) proxy.$message.success('培训公司保存成功')
} catch (error) { emits('refresh')
console.log(error) handleClose()
proxy.$message.error('培训公司保存失败')
} finally {
loading.value = false
}
} }
defineExpose({ open }) function open(row) {
pageData.keyCount++;
formData.value = row;
visibleDialog.value = true;
getList();
}
function getList () {
pageData.tableConfiger.loading = true;
qcckPost({ keyword : localStorage.getItem('idEntityCard') }, "/mosty-base/baxx/dwgl/list").then((res) => {
let arr = res || []
pageData.tableData = arr.filter(item => item.type == '02')
pageData.tableConfiger.loading = false;
}).catch(() => {
pageData.tableConfiger.loading = false;
});
}
defineExpose({
open
})
</script> </script>

View File

@ -19,14 +19,14 @@
{{ row?.sfpx === '01' ? `` : `` }} {{ row?.sfpx === '01' ? `` : `` }}
</template> </template>
<template #gw="{ row }"> <template #gw="{ row }">
<DictTag :value="row.gw" :options="D_BAXX_GWLX" /> <DictTag :value="row.gw" :tag="false" :options="D_BAXX_GWLX" />
</template> </template>
<!-- 操作 --> <!-- 操作 -->
<template #controls="{ row }"> <template #controls="{ row }">
<el-link type="success" @click="addEdit('upload', row)">上传资料</el-link> <el-link type="success" @click="addEdit('upload', row)">上传资料</el-link>
<el-link type="danger" @click="handleDelete([row.id])">删除</el-link> <el-link type="danger" @click="handleDelete([row.id])">删除</el-link>
<el-link type="warning" @click="addEdit('view', row)">详情</el-link> <el-link type="warning" @click="addEdit('view', row)">详情</el-link>
<el-link type="primary" @click="addEdit('select', row)">提交培训公司</el-link> <el-link type="primary" @click="addEdit('select', row)" v-if="!row.pxgsdm">提交培训公司</el-link>
</template> </template>
</MyTable> </MyTable>
<Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{ <Pages @changeNo="changeNo" @changeSize="changeSize" :tableHeight="pageData.tableHeight" :pageConfiger="{
@ -34,10 +34,8 @@
total: pageData.total total: pageData.total
}"></Pages> }"></Pages>
</div> </div>
<add-trainer-dialog v-model="isVisible" ref="trainerRef" @refresh="getList" /> <add-trainer-dialog v-model="isVisible" ref="trainerRef" @refresh="getList" />
<select-ttaning-dialog ref="selectTtaningRef" v-model="dialogVisible" @refresh="getList" /> <select-ttaning-dialog ref="selectTtaningRef" @refresh="getList" />
</div> </div>
</template> </template>
@ -46,18 +44,16 @@ import { getCurrentInstance, onMounted, reactive, ref } from "vue";
import MyTable from '@/components/aboutTable/MyTable.vue'; import MyTable from '@/components/aboutTable/MyTable.vue';
import Pages from '@/components/aboutTable/Pages.vue'; import Pages from '@/components/aboutTable/Pages.vue';
import Search from '@/components/aboutTable/Search.vue'; import Search from '@/components/aboutTable/Search.vue';
import { qcckGet, qcckPost, qcckDelete } from "@/api/qcckApi.js"; import { qcckPost } from "@/api/qcckApi.js";
import PageTitle from "@/components/aboutTable/PageTitle.vue"; import PageTitle from "@/components/aboutTable/PageTitle.vue";
import AddTrainerDialog from "./components/addTrainerDialog.vue"; import AddTrainerDialog from "./components/addTrainerDialog.vue";
import selectTtaningDialog from "./components/selectTtaningDialog.vue"; import selectTtaningDialog from "./components/selectTtaningDialog.vue";
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
const { D_BAXX_GWLX } = proxy.$dict("D_BAXX_GWLX") const { D_BAXX_GWLX } = proxy.$dict("D_BAXX_GWLX")
const trainerRef = ref(null); const trainerRef = ref(null);
const selectTtaningRef = ref(null); const selectTtaningRef = ref();
const queryFrom = ref({}); const queryFrom = ref({});
const isVisible = ref(false); const isVisible = ref(false);
const dialogVisible = ref(false);
const searchBox = ref(null); const searchBox = ref(null);
const searchConfiger = ref([ const searchConfiger = ref([
{ {
@ -107,8 +103,7 @@ const pageData = reactive({
// 表格高度计算 // 表格高度计算
const tabHeightFn = () => { const tabHeightFn = () => {
pageData.tableHeight = pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () { window.onresize = function () {
tabHeightFn(); tabHeightFn();
}; };
@ -116,7 +111,7 @@ const tabHeightFn = () => {
const addEdit = (type, row) => { const addEdit = (type, row) => {
if (type === 'select') { if (type === 'select') {
selectTtaningRef.value.open(row, type); selectTtaningRef.value.open(row);
} else { } else {
trainerRef.value.open(row, type); trainerRef.value.open(row, type);
} }
@ -129,38 +124,26 @@ const onSearch = (value) => {
} }
const getList = async () => { const getList = async () => {
try { pageData.tableConfiger.loading = true;
pageData.tableConfiger.loading = true; let data = { ...pageData.pageConfiger, ...queryFrom.value }
const res = await qcckPost({ const res = await qcckPost(data, `/mosty-base/baxx/basq/page`)
...pageData.pageConfiger, pageData.tableData = res.records || [];
...queryFrom.value pageData.total = res.total;
}, `/bagl/mosty-base/baxx/basq/page`) pageData.tableConfiger.loading = false;
if(res) {
pageData.tableData = res.records || [];
pageData.total = res.total;
}
} finally {
pageData.tableConfiger.loading = false;
}
} }
const handleDelete = async (ids) => { const handleDelete = async (ids) => {
await proxy.$modal.confirm("是否确认删除该培训人员?") await proxy.$modal.confirm("是否确认删除该培训人员?")
await qcckPost({ idList: ids }, `/mosty-base/baxx/basq/remove`)
try { proxy.$modal.msgSuccess("删除成功");
await qcckPost({ idList: ids }, `/bagl/mosty-base/baxx/basq/remove`) await getList();
proxy.$modal.msgSuccess("删除成功");
await getList();
} catch (error) {
proxy.$modal.msgError("删除失败");
}
} }
const changeNo = (val) => { const changeNo = (val) => {
pageData.pageConfiger.pageNum = val; pageData.pageConfiger.pageNum = val;
getList(); getList();
}; };
const changeSize = (val) => { const changeSize = (val) => {
pageData.pageConfiger.pageSize = val; pageData.pageConfiger.pageSize = val;
getList(); getList();

View File

@ -9,15 +9,21 @@
</div> </div>
<div class="cntinfo"> <div class="cntinfo">
<FormMessage ref="FormRef" :disabled="disabled" v-model="formData" :rules="rules" :formList="formList" :labelWidth='120'> <FormMessage ref="FormRef" :disabled="disabled" v-model="formData" :rules="rules" :formList="formList" :labelWidth='120'>
<template #pxgs>
<el-input v-model="formData.pxgs" @click="selectPxgs" readonly placeholder="请选择培训公司"></el-input>
</template>
<template #lzsj> <template #lzsj>
<el-input v-model="formData.lzsj" disabled placeholder="请选择离职时间"></el-input> <el-input v-model="formData.lzsj" disabled placeholder="请选择离职时间"></el-input>
</template> </template>
</FormMessage> </FormMessage>
</div> </div>
<!-- 选择公司 -->
<ChooseCompany ref="RefConmay" @change="changePxgs"></ChooseCompany>
</div> </div>
</template> </template>
<script setup> <script setup>
import ChooseCompany from './chooseCompany.vue'
import { ref, reactive, getCurrentInstance } from 'vue' import { ref, reactive, getCurrentInstance } from 'vue'
import { qcckPost } from "@/api/qcckApi.js"; import { qcckPost } from "@/api/qcckApi.js";
import FormMessage from '@/components/aboutTable/FormMessage.vue' import FormMessage from '@/components/aboutTable/FormMessage.vue'
@ -28,7 +34,7 @@ const title = ref('新增从业人员')
const loading = ref(false) const loading = ref(false)
const disabled = ref(false) const disabled = ref(false)
const FormRef = ref(null) const FormRef = ref(null)
const RefConmay = ref()
const props = defineProps({ const props = defineProps({
modelValue: { modelValue: {
type: Boolean, type: Boolean,
@ -56,6 +62,9 @@ const formList = reactive([
{ label: "资格证截至日期", prop: "zgzJssj", type: "date" }, { label: "资格证截至日期", prop: "zgzJssj", type: "date" },
{ label: "岗位", prop: "gw", type: "select", options: D_BAXX_GWLX }, { label: "岗位", prop: "gw", type: "select", options: D_BAXX_GWLX },
], ],
[
{ label: "培训公司", prop: "pxgs", type: "slot" },
],
[ [
{ label: "外派单位", prop: "wpdw", type: "input" }, { label: "外派单位", prop: "wpdw", type: "input" },
], ],
@ -76,10 +85,20 @@ const rules = {
zgzKssj: [{ required: true, message: "请选择资格证起始日期", trigger: "change" }], zgzKssj: [{ required: true, message: "请选择资格证起始日期", trigger: "change" }],
zgzJssj: [{ required: true, message: "请选择资格证截至日期", trigger: "blur" }], zgzJssj: [{ required: true, message: "请选择资格证截至日期", trigger: "blur" }],
whcd: [{ required: true, message: "请选择文化程度", trigger: "change" }], whcd: [{ required: true, message: "请选择文化程度", trigger: "change" }],
pxgs: [{ required: true, message: "请选择培训公司", trigger: "change" }],
} }
const formData = ref({}) const formData = ref({})
const selectPxgs = () => {
RefConmay.value.open()
}
const changePxgs = (data) => {
formData.value.pxgs = data.pxgs
formData.value.pxgsid = data.pxgsid
}
const close = () => { const close = () => {
FormRef.value?.reset(); FormRef.value?.reset();
formData.value = {} formData.value = {}
@ -89,14 +108,10 @@ const close = () => {
const open = (row = {}, type = 'add') => { const open = (row = {}, type = 'add') => {
dialogVisible.value = true dialogVisible.value = true
disabled.value = false disabled.value = false
const fieldsToSplit = ['tp', 'bazzp']; const fieldsToSplit = ['tp', 'bazzp'];
fieldsToSplit.forEach(field => { fieldsToSplit.forEach(field => {
row[field] = typeof row[field] === 'string' row[field] = typeof row[field] === 'string' ? row[field].split(',') : row[field];
? row[field].split(',')
: row[field];
}); });
formData.value = { ...row } formData.value = { ...row }
if (type === 'add') { if (type === 'add') {
title.value = '新增从业人员' title.value = '新增从业人员'

View File

@ -0,0 +1,91 @@
<template>
<el-dialog class="dialogWerapper" width="80%" v-model="visibleDialog" title="选择公司" @close="handleClose">
<div>
<MyTable
:tableData="pageData.tableData"
:tableColumn="pageData.tableColumn"
:tableHeight="pageData.tableHeight"
:key="pageData.keyCount"
:tableConfiger="pageData.tableConfiger"
:controlsWidth="pageData.controlsWidth"
@chooseData="chooseData"
>
</MyTable>
</div>
<template #footer>
<div class="flex just-center">
<el-button type="primary" @click="handleSubmit">确定</el-button>
<el-button @click="handleClose">取消</el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import MyTable from "@/components/aboutTable/MyTable.vue";
import { ref, reactive,getCurrentInstance } from 'vue';
import { qcckPost } from "@/api/qcckApi.js";
const emits = defineEmits(['change']);
const { proxy } = getCurrentInstance();
const visibleDialog = ref(false);
const pageData = reactive({
tableData: [],
keyCount: 0,
tableConfiger: {
rowHieght: 61,
showSelectType: "radio",
loading: false,
haveControls:false
},
tableHeight:500,
pageConfiger: {
pageSize: 20,
pageCurrent: 1
},
controlsWidth: 180,
tableColumn: [
{ label: "单位名称", prop: "dwmc" },
{ label: "信用代码", prop: "xydm" },
{ label: "场所名称", prop: "csmc" },
{ label: "场所电话", prop: "csLxdh" }
]
});
const formData = ref({})
const handleClose = () => {
formData.value = {};
visibleDialog.value = false;
}
const chooseData = (row) => {
formData.value.pxgsid = row[0].id;
formData.value.pxgs = row[0].dwmc;
}
const handleSubmit = async () => {
if(!formData.value.pxgsid) return proxy.$message.error('请选择公司');
let obj = JSON.parse(JSON.stringify(formData.value))
emits('change',obj)
handleClose()
}
function open() {
pageData.keyCount++;
visibleDialog.value = true;
getList();
}
function getList () {
pageData.tableConfiger.loading = true;
qcckPost({ keyword : localStorage.getItem('idEntityCard')}, "/mosty-base/baxx/dwgl/list").then((res) => {
pageData.tableData = res || []
pageData.tableConfiger.loading = false;
}).catch(() => {
pageData.tableConfiger.loading = false;
});
}
defineExpose({
open
})
</script>

View File

@ -13,10 +13,10 @@
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight" <MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"> :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
<template #sflz="{ row }"> <template #sflz="{ row }">
<DictTag :value="row.newSflz" :options="D_BZ_SF" /> <span>{{ row.sflz == 1 ? '离职' : '在职' }}</span>
</template> </template>
<template #gw="{ row }"> <template #gw="{ row }">
<DictTag :value="row.gw" :options="D_BAXX_GWLX" /> <DictTag :value="row.gw" :tag="false" :options="D_BAXX_GWLX" />
</template> </template>
<!-- 操作 --> <!-- 操作 -->
<template #controls="{ row }"> <template #controls="{ row }">
@ -31,7 +31,6 @@
total: pageData.total total: pageData.total
}"></Pages> }"></Pages>
</div> </div>
<add-practitioner-dialog v-model="isVisible" ref="addPractitionerRef" @refresh="getList" /> <add-practitioner-dialog v-model="isVisible" ref="addPractitionerRef" @refresh="getList" />
</div> </div>
</template> </template>
@ -150,21 +149,12 @@ const handleDelete = async (ids) => {
}; };
const getList = async () => { const getList = async () => {
try { pageData.tableConfiger.loading = true;
pageData.tableConfiger.loading = true; let params = { ...pageData.pageConfiger, ...queryFrom.value }
const res = await qcckPost({ const res = await qcckPost(params, `/mosty-base/baxx/cyry/page`)
...pageData.pageConfiger, pageData.tableData = res.records || []
...queryFrom.value pageData.total = res.total;
}, `/bagl/mosty-base/baxx/cyry/page`) pageData.tableConfiger.loading = false;
if(res) {
// 处理sflz为null默认为0
pageData.tableData = res.records?.map(i => ({ ...i, newSflz: i?.sflz === null ? 0 : i.sflz })) || [];
pageData.total = res.total;
}
} finally {
pageData.tableConfiger.loading = false;
}
} }
const changeNo = (val) => { const changeNo = (val) => {

View File

@ -13,10 +13,7 @@
<MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight" <MyTable :tableData="pageData.tableData" :tableColumn="pageData.tableColumn" :tableHeight="pageData.tableHeight"
:key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth"> :key="pageData.keyCount" :tableConfiger="pageData.tableConfiger" :controlsWidth="pageData.controlsWidth">
<template #gw="{ row }"> <template #gw="{ row }">
<DictTag :value="row.gw" :options="D_BAXX_GWLX" /> <DictTag :value="row.gw" :tag="false" :options="D_BAXX_GWLX" />
</template>
<template #ssbags="{ row }">
<DictTag :value="row.ssbags" :options="D_BAXX_DWLX" />
</template> </template>
<!-- 操作 --> <!-- 操作 -->
<template #controls="{ row }"> <template #controls="{ row }">
@ -91,14 +88,13 @@ const pageData = reactive({
{ label: "证件号码", prop: "sfzh" }, { label: "证件号码", prop: "sfzh" },
{ label: "联系方式", prop: "lxdh" }, { label: "联系方式", prop: "lxdh" },
{ label: "岗位", prop: "gw", showSolt: true }, { label: "岗位", prop: "gw", showSolt: true },
{ label: "所属保安公司", prop: "ssbags", showSolt: true }, { label: "所属保安公司", prop: "pxgs" },
] ]
}); });
// 表格高度计算 // 表格高度计算
const tabHeightFn = () => { const tabHeightFn = () => {
pageData.tableHeight = pageData.tableHeight = window.innerHeight - searchBox.value.offsetHeight - 250;
window.innerHeight - searchBox.value.offsetHeight - 250;
window.onresize = function () { window.onresize = function () {
tabHeightFn(); tabHeightFn();
}; };
@ -115,52 +111,29 @@ const onSearch = (value) => {
} }
const getList = async () => { const getList = async () => {
try { pageData.tableConfiger.loading = true;
pageData.tableConfiger.loading = true; let pxgsid = localStorage.getItem('userInfo') ? JSON.parse(localStorage.getItem('userInfo'))?.pxgsid : null;
const res = await qcckPost({ let params = { ...pageData.pageConfiger, ...queryFrom.value, sfxxpx: '01',pxgsid: pxgsid }
...pageData.pageConfiger, const res = await qcckPost(params, `/mosty-base/baxx/pxry/page`)
...queryFrom.value, pageData.tableData = res.records || [];
sfxxpx: '01' pageData.total = res.total;
}, `/mosty-base/baxx/pxry/page`) pageData.tableConfiger.loading = false;
if(res) {
pageData.tableData = res.records || [];
pageData.total = res.total;
}
} finally {
pageData.tableConfiger.loading = false;
}
} }
// 提交培训 // 提交培训
const handleSubmitTraining = async (row) => { const handleSubmitTraining = async (row) => {
await proxy.$modal.confirm("是否确认提交该人员进行待培训?") await proxy.$modal.confirm("是否确认提交该人员进行待培训?")
await qcckPost({ ...row, sfxxpx: '02' }, "/mosty-base/baxx/pxry/edit")
try { proxy.$modal.msgSuccess("提交培训成功");
await qcckPost({ await getList();
...row,
sfxxpx: '02'
}, "/mosty-base/baxx/pxry/edit")
proxy.$modal.msgSuccess("提交培训成功");
await getList();
} catch (error) {
proxy.$modal.msgError("提交培训失败");
console.log(error)
}
}; };
// 删除 // 删除
const handleDelete = async (ids) => { const handleDelete = async (ids) => {
await proxy.$modal.confirm("是否确认删除该培训人员?") await proxy.$modal.confirm("是否确认删除该培训人员?")
await qcckPost({ idList: ids }, "/mosty-base/baxx/pxry/remove")
try { proxy.$modal.msgSuccess("删除成功");
await qcckPost({ idList: ids }, "/bagl/mosty-base/baxx/pxry/remove") await getList();
proxy.$modal.msgSuccess("删除成功");
await getList();
} catch (error) {
proxy.$modal.msgError("删除失败");
console.log(error)
}
}; };
const changeNo = (val) => { const changeNo = (val) => {

View File

@ -76,19 +76,13 @@ const tabHeightFn = () => {
const getList = async () => { const getList = async () => {
try { pageData.tableConfiger.loading = true;
pageData.tableConfiger.loading = true; let data = { ...pageData.pageConfiger, }
const res = await qcckPost({ data.keyword = localStorage.getItem('idEntityCard');
...pageData.pageConfiger, const res = await qcckPost(data, `/mosty-base/baxx/dwgl/page`)
}, `/bagl/mosty-base/baxx/dwgl/page`) pageData.tableData = res.records || [];
pageData.total = res.total;
if(res) { pageData.tableConfiger.loading = false;
pageData.tableData = res.records || [];
pageData.total = res.total;
}
} finally {
pageData.tableConfiger.loading = false;
}
}; };
const addEdit = (type, row) => { const addEdit = (type, row) => {