Ver Fonte

fix: 修改组件和api

fan há 2 anos atrás
pai
commit
d9e1ba5e13

+ 23 - 2
src/api/biz/archives/patientBasicApi.ts

@@ -1,5 +1,8 @@
+import { UploadFileParams } from '#/axios';
 import { defHttp } from '/@/utils/http/axios';
 import { setParams } from '/@/utils/index';
+import { useGlobSetting } from '/@/hooks/setting';
+const globSetting = useGlobSetting();
 
 export enum Api {
   archivesPatientBasicQueryPage = '/archives/patientBasic/query/page',
@@ -9,6 +12,7 @@ export enum Api {
   archivesPatientBasicRemove = '/archives/patientBasic/removeByIds',
   archivesPatientBasicStats = '/archives/patientBasic/stats',
   archivesPatientBasicImportBatch = '/archives/patientBasic/import/batch',
+  archivesPatientBasicExport = '/archives/patientBasic/export',
 }
 
 /**
@@ -157,6 +161,23 @@ export const archivesPatientBasicRemove = (params: Array<string | number>) => {
  * @description: 批量导入,权限 - archives:patientBasic:import
  * @method: POST
  */
-export const archivesPatientBasicImportBatch = (params: Array<string | number>) => {
-  return defHttp.post({ url: Api.archivesPatientBasicImportBatch, params: params });
+export function archivesPatientBasicImportBatch(
+  params: UploadFileParams,
+  onUploadProgress: (progressEvent: any) => void,
+) {
+  return defHttp.uploadFile(
+    {
+      url: globSetting.apiUrl + Api.archivesPatientBasicImportBatch,
+      onUploadProgress,
+    },
+    params,
+  );
+}
+
+/**
+ * @description: 导出,权限 - archives:patientBasic:export
+ * @method: POST
+ */
+export const archivesPatientBasicExport = (params: Array<string | number>) => {
+  return defHttp.post({ url: Api.archivesPatientBasicExport, params: params });
 };

+ 0 - 6
src/api/common/index.ts

@@ -13,7 +13,6 @@ enum Api {
   getDownloadUrl = '/sys/storage/file/download/',
   getPreviewUrl = '/sys/storage/file/preview/',
   excelSheetDetail = '/excel/sheet/detail',
-  tempDownload = '/archives/patientBasic/export',
   postFileRemoveByIds = '/sys/storage/file/removeByIds',
 }
 
@@ -69,8 +68,3 @@ export function getPreviewUrl(id) {
 export const excelSheetDetail = (id: string) => {
   return defHttp.get({ url: Api.excelSheetDetail + '/' + id });
 };
-
-// 下载模板
-export const tempDownload = (params?: Array<string | number>) => {
-  return defHttp.post({ url: Api.tempDownload, params: params });
-};

+ 1388 - 369
src/assets/iconfont/demo.css

@@ -1,539 +1,1558 @@
-/* Logo 字体 */
 @font-face {
-  font-family: "iconfont logo";
-  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
-  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
-    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
-    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
-    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
+  font-family: 'iconfont'; /* Project id 3806176 */
+  src: url('//at.alicdn.com/t/c/font_3806176_wrxg0b4qkz.woff2?t=1695084041609') format('woff2'),
+    url('//at.alicdn.com/t/c/font_3806176_wrxg0b4qkz.woff?t=1695084041609') format('woff'),
+    url('//at.alicdn.com/t/c/font_3806176_wrxg0b4qkz.ttf?t=1695084041609') format('truetype');
 }
 
-.logo {
-  font-family: "iconfont logo";
-  font-size: 160px;
+.iconfont {
+  font-family: 'iconfont' !important;
+  font-size: 16px;
   font-style: normal;
   -webkit-font-smoothing: antialiased;
   -moz-osx-font-smoothing: grayscale;
 }
 
-/* tabs */
-.nav-tabs {
-  position: relative;
+.icon-xt-daoruchenggong:before {
+  content: '\e73d';
 }
 
-.nav-tabs .nav-more {
-  position: absolute;
-  right: 0;
-  bottom: 0;
-  height: 42px;
-  line-height: 42px;
-  color: #666;
+.icon-xt-disable_default:before {
+  content: '\e605';
 }
 
-#tabs {
-  border-bottom: 1px solid #eee;
+.icon-xt-disable_selected:before {
+  content: '\e606';
 }
 
-#tabs li {
-  cursor: pointer;
-  width: 100px;
-  height: 40px;
-  line-height: 40px;
-  text-align: center;
-  font-size: 16px;
-  border-bottom: 2px solid transparent;
-  position: relative;
-  z-index: 1;
-  margin-bottom: -1px;
-  color: #666;
+.icon-xt-Inventory_default:before {
+  content: '\e607';
 }
 
+.icon-xt-Inventory_disable:before {
+  content: '\e608';
+}
 
-#tabs .active {
-  border-bottom-color: #f00;
-  color: #222;
+.icon-xt-Inventory_selected:before {
+  content: '\e609';
 }
 
-.tab-container .content {
-  display: none;
+.icon-xt-revocation_default:before {
+  content: '\e60a';
 }
 
-/* 页面布局 */
-.main {
-  padding: 30px 100px;
-  width: 960px;
-  margin: 0 auto;
+.icon-xt-revocation_selected:before {
+  content: '\e60b';
 }
 
-.main .logo {
-  color: #333;
-  text-align: left;
-  margin-bottom: 30px;
-  line-height: 1;
-  height: 110px;
-  margin-top: -50px;
-  overflow: hidden;
-  *zoom: 1;
+.icon-xt-dual-pump_default:before {
+  content: '\e73f';
 }
 
-.main .logo a {
-  font-size: 160px;
-  color: #333;
+.icon-xt-bed_disable:before {
+  content: '\e73e';
 }
 
-.helps {
-  margin-top: 40px;
+.icon-xt-bed_default:before {
+  content: '\e73a';
 }
 
-.helps pre {
-  padding: 20px;
-  margin: 10px 0;
-  border: solid 1px #e7e1cd;
-  background-color: #fffdef;
-  overflow: auto;
+.icon-xt-edit-white_default:before {
+  content: '\e73b';
 }
 
-.icon_lists {
-  width: 100% !important;
-  overflow: hidden;
-  *zoom: 1;
+.icon-xt-bed_selected:before {
+  content: '\e73c';
 }
 
-.icon_lists li {
-  width: 100px;
-  margin-bottom: 10px;
-  margin-right: 20px;
-  text-align: center;
-  list-style: none !important;
-  cursor: default;
+.icon-xt-success:before {
+  content: '\e738';
 }
 
-.icon_lists li .code-name {
-  line-height: 1.2;
+.icon-xt-fail:before {
+  content: '\e739';
 }
 
-.icon_lists .icon {
-  display: block;
-  height: 100px;
-  line-height: 100px;
-  font-size: 42px;
-  margin: 10px auto;
-  color: #333;
-  -webkit-transition: font-size 0.25s linear, width 0.25s linear;
-  -moz-transition: font-size 0.25s linear, width 0.25s linear;
-  transition: font-size 0.25s linear, width 0.25s linear;
+.icon-xt-details-refresh_selected:before {
+  content: '\e737';
 }
 
-.icon_lists .icon:hover {
-  font-size: 100px;
+.icon-xt-details_default:before {
+  content: '\e733';
 }
 
-.icon_lists .svg-icon {
-  /* 通过设置 font-size 来改变图标大小 */
-  width: 1em;
-  /* 图标和文字相邻时,垂直对齐 */
-  vertical-align: -0.15em;
-  /* 通过设置 color 来改变 SVG 的颜色/fill */
-  fill: currentColor;
-  /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
-      normalize.css 中也包含这行 */
-  overflow: hidden;
+.icon-xt-details_save_default:before {
+  content: '\e734';
 }
 
-.icon_lists li .name,
-.icon_lists li .code-name {
-  color: #666;
+.icon-xt-details_save_selected:before {
+  content: '\e735';
 }
 
-/* markdown 样式 */
-.markdown {
-  color: #666;
-  font-size: 14px;
-  line-height: 1.8;
+.icon-xt-details_selected:before {
+  content: '\e736';
 }
 
-.highlight {
-  line-height: 1.5;
+.icon-xt-annex:before {
+  content: '\e729';
 }
 
-.markdown img {
-  vertical-align: middle;
-  max-width: 100%;
+.icon-xt-details_screen_default:before {
+  content: '\e72a';
 }
 
-.markdown h1 {
-  color: #404040;
-  font-weight: 500;
-  line-height: 40px;
-  margin-bottom: 24px;
+.icon-xt-numerical_up:before {
+  content: '\e72b';
 }
 
-.markdown h2,
-.markdown h3,
-.markdown h4,
-.markdown h5,
-.markdown h6 {
-  color: #404040;
-  margin: 1.6em 0 0.6em 0;
-  font-weight: 500;
-  clear: both;
+.icon-xt-numerical_down:before {
+  content: '\e72c';
 }
 
-.markdown h1 {
-  font-size: 28px;
+.icon-xt-details_upload_default:before {
+  content: '\e72d';
 }
 
-.markdown h2 {
-  font-size: 22px;
+.icon-xt-details_upload_selected:before {
+  content: '\e72e';
 }
 
-.markdown h3 {
-  font-size: 16px;
+.icon-xt-details_screen_selected:before {
+  content: '\e72f';
+}
+
+.icon-xt-abnormal:before {
+  content: '\e730';
+}
+
+.icon-xt-details-annex:before {
+  content: '\e731';
+}
+
+.icon-xt-details-refresh_default:before {
+  content: '\e732';
+}
+
+.icon-xt-add_disable:before {
+  content: '\e721';
+}
+
+.icon-xt-add_default:before {
+  content: '\e722';
+}
+
+.icon-xt-reduce_selected:before {
+  content: '\e723';
+}
+
+.icon-xt-add_selected:before {
+  content: '\e724';
+}
+
+.icon-xt-release_default:before {
+  content: '\e725';
+}
+
+.icon-xt-reduce_disable:before {
+  content: '\e726';
+}
+
+.icon-xt-release_selected:before {
+  content: '\e727';
+}
+
+.icon-xt-reduce_default:before {
+  content: '\e728';
+}
+
+.icon-xt-drawer-close_selected:before {
+  content: '\e71d';
+}
+
+.icon-xt-drawer-close_default:before {
+  content: '\e71e';
+}
+
+.icon-xt-drawer-return_default:before {
+  content: '\e71f';
+}
+
+.icon-xt-drawer-return_selected:before {
+  content: '\e720';
+}
+
+.icon-xt-details_edit_selected:before {
+  content: '\e713';
+}
+
+.icon-xt-details_more_selected:before {
+  content: '\e714';
+}
+
+.icon-xt-details_edit_disable:before {
+  content: '\e715';
+}
+
+.icon-xt-details_more_default:before {
+  content: '\e716';
+}
+
+.icon-xt-details_edit_default:before {
+  content: '\e717';
+}
+
+.icon-xt-details_delete_disable:before {
+  content: '\e718';
+}
+
+.icon-xt-details_increase_default:before {
+  content: '\e719';
+}
+
+.icon-xt-details_delete_selected:before {
+  content: '\e71a';
+}
+
+.icon-xt-details_increase_selected:before {
+  content: '\e71b';
+}
+
+.icon-xt-details_delete_default:before {
+  content: '\e71c';
+}
+
+.icon-xt-close_default:before {
+  content: '\e70d';
+}
+
+.icon-xt-import_default:before {
+  content: '\e70e';
+}
+
+.icon-xt-close_selected:before {
+  content: '\e70f';
+}
+
+.icon-xt-screen_selected:before {
+  content: '\e710';
+}
+
+.icon-xt-screen_default:before {
+  content: '\e711';
+}
+
+.icon-xt-import_selected:before {
+  content: '\e712';
+}
+
+.icon-xt-sort_up:before {
+  content: '\e708';
+}
+
+.icon-xt-medical_default:before {
+  content: '\e709';
+}
+
+.icon-xt-sort_down:before {
+  content: '\e70a';
+}
+
+.icon-xt-medical_selected:before {
+  content: '\e70b';
+}
+
+.icon-xt-sort:before {
+  content: '\e70c';
+}
+
+.icon-xt-edit_selected:before {
+  content: '\e6f2';
+}
+
+.icon-xt-edit_default:before {
+  content: '\e6f3';
+}
+
+.icon-xt-ward_selected:before {
+  content: '\e6f4';
+}
+
+.icon-xt-ward_default:before {
+  content: '\e6f5';
+}
+
+.icon-xt-print_selected:before {
+  content: '\e6f6';
+}
+
+.icon-xt-print_default:before {
+  content: '\e6f7';
+}
+
+.icon-xt-arrow_up_selected:before {
+  content: '\e6f8';
+}
+
+.icon-xt-arrow_down:before {
+  content: '\e6f9';
+}
+
+.icon-xt-download_default:before {
+  content: '\e6fa';
+}
+
+.icon-xt-export_default:before {
+  content: '\e6fb';
+}
+
+.icon-xt-export_selected:before {
+  content: '\e6fc';
+}
+
+.icon-xt-message_default:before {
+  content: '\e6fd';
+}
+
+.icon-xt-more_default:before {
+  content: '\e6fe';
+}
+
+.icon-xt-message_selected:before {
+  content: '\e6ff';
+}
+
+.icon-xt-search:before {
+  content: '\e700';
+}
+
+.icon-xt-download_selected:before {
+  content: '\e701';
+}
+
+.icon-xt-delete_default:before {
+  content: '\e702';
+}
+
+.icon-xt-more_selected:before {
+  content: '\e703';
+}
+
+.icon-xt-delete_selected:before {
+  content: '\e704';
+}
+
+.icon-xt-increase:before {
+  content: '\e705';
+}
+
+.icon-xt-arrow_up:before {
+  content: '\e706';
+}
+
+.icon-xt-logo_left:before {
+  content: '\e707';
+}
+
+.icon-xt-cost_selected:before {
+  content: '\e6d2';
+}
+
+.icon-xt-engineer_selected:before {
+  content: '\e6d3';
+}
+
+.icon-xt-cost_default:before {
+  content: '\e6d4';
+}
+
+.icon-xt-time:before {
+  content: '\e6d5';
 }
 
-.markdown h4 {
-  font-size: 14px;
+.icon-xt-statistics_default:before {
+  content: '\e6d6';
 }
 
-.markdown h5 {
-  font-size: 12px;
+.icon-xt-male_lg:before {
+  content: '\e6d7';
 }
 
-.markdown h6 {
-  font-size: 12px;
+.icon-xt-today_selected:before {
+  content: '\e6d8';
 }
 
-.markdown hr {
-  height: 1px;
-  border: 0;
-  background: #e9e9e9;
-  margin: 16px 0;
-  clear: both;
+.icon-xt-home_selected:before {
+  content: '\e6d9';
 }
 
-.markdown p {
-  margin: 1em 0;
+.icon-xt-health_selected:before {
+  content: '\e6da';
 }
 
-.markdown>p,
-.markdown>blockquote,
-.markdown>.highlight,
-.markdown>ol,
-.markdown>ul {
-  width: 80%;
+.icon-xt-home_default:before {
+  content: '\e6db';
 }
 
-.markdown ul>li {
-  list-style: circle;
+.icon-xt-date:before {
+  content: '\e6dc';
 }
 
-.markdown>ul li,
-.markdown blockquote ul>li {
-  margin-left: 20px;
-  padding-left: 4px;
+.icon-xt-engineer_default:before {
+  content: '\e6dd';
 }
 
-.markdown>ul li p,
-.markdown>ol li p {
-  margin: 0.6em 0;
+.icon-xt-today_default:before {
+  content: '\e6de';
 }
 
-.markdown ol>li {
-  list-style: decimal;
+.icon-xt-male_sm:before {
+  content: '\e6df';
 }
 
-.markdown>ol li,
-.markdown blockquote ol>li {
-  margin-left: 20px;
-  padding-left: 4px;
+.icon-xt-reservation_selected:before {
+  content: '\e6e0';
 }
 
-.markdown code {
-  margin: 0 3px;
-  padding: 0 5px;
-  background: #eee;
-  border-radius: 3px;
+.icon-xt-female_lg:before {
+  content: '\e6e1';
 }
 
-.markdown strong,
-.markdown b {
-  font-weight: 600;
+.icon-xt-female_sm:before {
+  content: '\e6e2';
 }
 
-.markdown>table {
-  border-collapse: collapse;
-  border-spacing: 0px;
-  empty-cells: show;
-  border: 1px solid #e9e9e9;
-  width: 95%;
-  margin-bottom: 24px;
+.icon-xt-drug_default:before {
+  content: '\e6e3';
 }
 
-.markdown>table th {
-  white-space: nowrap;
-  color: #333;
-  font-weight: 600;
+.icon-xt-record_selected:before {
+  content: '\e6e4';
 }
 
-.markdown>table th,
-.markdown>table td {
-  border: 1px solid #e9e9e9;
-  padding: 8px 16px;
-  text-align: left;
+.icon-xt-machine_default:before {
+  content: '\e6e5';
 }
 
-.markdown>table th {
-  background: #F7F7F7;
+.icon-xt-quality_default:before {
+  content: '\e6e6';
 }
 
-.markdown blockquote {
-  font-size: 90%;
-  color: #999;
-  border-left: 4px solid #e9e9e9;
-  padding-left: 0.8em;
-  margin: 1em 0;
+.icon-xt-reservation_default:before {
+  content: '\e6e7';
 }
 
-.markdown blockquote p {
-  margin: 0;
+.icon-xt-navigation_up:before {
+  content: '\e6e8';
 }
 
-.markdown .anchor {
-  opacity: 0;
-  transition: opacity 0.3s ease;
-  margin-left: 8px;
+.icon-xt-statistics_selected:before {
+  content: '\e6e9';
 }
 
-.markdown .waiting {
-  color: #ccc;
+.icon-xt-health_default:before {
+  content: '\e6ea';
 }
 
-.markdown h1:hover .anchor,
-.markdown h2:hover .anchor,
-.markdown h3:hover .anchor,
-.markdown h4:hover .anchor,
-.markdown h5:hover .anchor,
-.markdown h6:hover .anchor {
-  opacity: 1;
-  display: inline-block;
+.icon-xt-navigation_down:before {
+  content: '\e6eb';
 }
 
-.markdown>br,
-.markdown>p>br {
-  clear: both;
+.icon-xt-set_default:before {
+  content: '\e6ec';
 }
 
+.icon-xt-machine_selected:before {
+  content: '\e6ed';
+}
+
+.icon-xt-quality_selected:before {
+  content: '\e6ee';
+}
+
+.icon-xt-set_selected:before {
+  content: '\e6ef';
+}
+
+.icon-xt-drug_selected:before {
+  content: '\e6f0';
+}
+
+.icon-xt-record_default:before {
+  content: '\e6f1';
+}
+
+.icon-lingdang:before {
+  content: '\e64a';
+}
+
+.icon-unlock:before {
+  content: '\e808';
+}
+
+.icon-lock:before {
+  content: '\e809';
+}
+
+.icon-customerservice:before {
+  content: '\e80a';
+}
+
+.icon-medicinebox:before {
+  content: '\e80b';
+}
+
+.icon-shop:before {
+  content: '\e80c';
+}
+
+.icon-rocket:before {
+  content: '\e80d';
+}
+
+.icon-shopping:before {
+  content: '\e80e';
+}
+
+.icon-folder:before {
+  content: '\e80f';
+}
+
+.icon-folder-open:before {
+  content: '\e810';
+}
+
+.icon-folder-add:before {
+  content: '\e811';
+}
+
+.icon-accountbook:before {
+  content: '\e812';
+}
+
+.icon-contacts:before {
+  content: '\e813';
+}
+
+.icon-carryout:before {
+  content: '\e814';
+}
+
+.icon-calendar-check:before {
+  content: '\e815';
+}
+
+.icon-calendar:before {
+  content: '\e816';
+}
+
+.icon-scan:before {
+  content: '\e817';
+}
+
+.icon-select:before {
+  content: '\e818';
+}
+
+.icon-laptop:before {
+  content: '\e819';
+}
+
+.icon-barcode:before {
+  content: '\e81a';
+}
+
+.icon-camera:before {
+  content: '\e81b';
+}
+
+.icon-cluster:before {
+  content: '\e81c';
+}
+
+.icon-gateway:before {
+  content: '\e81d';
+}
+
+.icon-car:before {
+  content: '\e81e';
+}
+
+.icon-printer:before {
+  content: '\e81f';
+}
+
+.icon-read:before {
+  content: '\e820';
+}
+
+.icon-cloud-server:before {
+  content: '\e821';
+}
+
+.icon-cloud-upload:before {
+  content: '\e822';
+}
+
+.icon-cloud:before {
+  content: '\e823';
+}
+
+.icon-cloud-download:before {
+  content: '\e824';
+}
+
+.icon-cloud-sync:before {
+  content: '\e825';
+}
+
+.icon-video:before {
+  content: '\e826';
+}
+
+.icon-notification:before {
+  content: '\e827';
+}
+
+.icon-sound:before {
+  content: '\e828';
+}
+
+.icon-radarchart:before {
+  content: '\e829';
+}
+
+.icon-qrcode:before {
+  content: '\e82a';
+}
+
+.icon-fund:before {
+  content: '\e82b';
+}
+
+.icon-image:before {
+  content: '\e82c';
+}
+
+.icon-mail:before {
+  content: '\e82d';
+}
+
+.icon-table:before {
+  content: '\e82e';
+}
+
+.icon-idcard:before {
+  content: '\e82f';
+}
+
+.icon-creditcard:before {
+  content: '\e830';
+}
+
+.icon-heart:before {
+  content: '\e831';
+}
+
+.icon-block:before {
+  content: '\e832';
+}
+
+.icon-error:before {
+  content: '\e833';
+}
+
+.icon-star:before {
+  content: '\e834';
+}
+
+.icon-gold:before {
+  content: '\e835';
+}
+
+.icon-heatmap:before {
+  content: '\e836';
+}
+
+.icon-wifi:before {
+  content: '\e837';
+}
+
+.icon-attachment:before {
+  content: '\e838';
+}
+
+.icon-edit:before {
+  content: '\e839';
+}
+
+.icon-key:before {
+  content: '\e83a';
+}
+
+.icon-api:before {
+  content: '\e83b';
+}
+
+.icon-highlight:before {
+  content: '\e83c';
+}
+
+.icon-monitor:before {
+  content: '\e83d';
+}
+
+.icon-link:before {
+  content: '\e83e';
+}
+
+.icon-man:before {
+  content: '\e83f';
+}
+
+.icon-percentage:before {
+  content: '\e840';
+}
 
-.hljs {
-  display: block;
-  background: white;
-  padding: 0.5em;
-  color: #333333;
-  overflow-x: auto;
+.icon-pushpin:before {
+  content: '\e841';
 }
 
-.hljs-comment,
-.hljs-meta {
-  color: #969896;
+.icon-phone:before {
+  content: '\e842';
 }
 
-.hljs-string,
-.hljs-variable,
-.hljs-template-variable,
-.hljs-strong,
-.hljs-emphasis,
-.hljs-quote {
-  color: #df5000;
+.icon-shake:before {
+  content: '\e843';
 }
 
-.hljs-keyword,
-.hljs-selector-tag,
-.hljs-type {
-  color: #a71d5d;
+.icon-tag:before {
+  content: '\e844';
 }
 
-.hljs-literal,
-.hljs-symbol,
-.hljs-bullet,
-.hljs-attribute {
-  color: #0086b3;
+.icon-wrench:before {
+  content: '\e845';
 }
 
-.hljs-section,
-.hljs-name {
-  color: #63a35c;
+.icon-tags:before {
+  content: '\e846';
 }
 
-.hljs-tag {
-  color: #333333;
+.icon-scissor:before {
+  content: '\e847';
 }
 
-.hljs-title,
-.hljs-attr,
-.hljs-selector-id,
-.hljs-selector-class,
-.hljs-selector-attr,
-.hljs-selector-pseudo {
-  color: #795da3;
+.icon-mr:before {
+  content: '\e848';
 }
 
-.hljs-addition {
-  color: #55a532;
-  background-color: #eaffea;
+.icon-share:before {
+  content: '\e849';
 }
 
-.hljs-deletion {
-  color: #bd2c00;
-  background-color: #ffecec;
+.icon-branches:before {
+  content: '\e84a';
 }
 
-.hljs-link {
-  text-decoration: underline;
+.icon-fork:before {
+  content: '\e84b';
 }
 
-/* 代码高亮 */
-/* PrismJS 1.15.0
-https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
-/**
- * prism.js default theme for JavaScript, CSS and HTML
- * Based on dabblet (http://dabblet.com)
- * @author Lea Verou
- */
-code[class*="language-"],
-pre[class*="language-"] {
-  color: black;
-  background: none;
-  text-shadow: 0 1px white;
-  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
-  text-align: left;
-  white-space: pre;
-  word-spacing: normal;
-  word-break: normal;
-  word-wrap: normal;
-  line-height: 1.5;
+.icon-shrink:before {
+  content: '\e84c';
+}
 
-  -moz-tab-size: 4;
-  -o-tab-size: 4;
-  tab-size: 4;
+.icon-arrawsalt:before {
+  content: '\e84d';
+}
 
-  -webkit-hyphens: none;
-  -moz-hyphens: none;
-  -ms-hyphens: none;
-  hyphens: none;
+.icon-verticalright:before {
+  content: '\e84e';
 }
 
-pre[class*="language-"]::-moz-selection,
-pre[class*="language-"] ::-moz-selection,
-code[class*="language-"]::-moz-selection,
-code[class*="language-"] ::-moz-selection {
-  text-shadow: none;
-  background: #b3d4fc;
+.icon-right:before {
+  content: '\e84f';
 }
 
-pre[class*="language-"]::selection,
-pre[class*="language-"] ::selection,
-code[class*="language-"]::selection,
-code[class*="language-"] ::selection {
-  text-shadow: none;
-  background: #b3d4fc;
+.icon-left:before {
+  content: '\e850';
 }
 
-@media print {
+.icon-up:before {
+  content: '\e851';
+}
+
+.icon-down:before {
+  content: '\e852';
+}
+
+.icon-fullscreen:before {
+  content: '\e853';
+}
+
+.icon-fullscreen-exit:before {
+  content: '\e854';
+}
+
+.icon-doubleleft:before {
+  content: '\e855';
+}
+
+.icon-doubleright:before {
+  content: '\e856';
+}
+
+.icon-arrowright:before {
+  content: '\e857';
+}
+
+.icon-arrowup:before {
+  content: '\e858';
+}
+
+.icon-arrowleft:before {
+  content: '\e859';
+}
+
+.icon-arrowdown:before {
+  content: '\e85a';
+}
+
+.icon-upload:before {
+  content: '\e85b';
+}
+
+.icon-unorderedlist:before {
+  content: '\e85c';
+}
+
+.icon-check:before {
+  content: '\e85d';
+}
+
+.icon-ellipsis:before {
+  content: '\e85e';
+}
+
+.icon-close:before {
+  content: '\e85f';
+}
+
+.icon-pause:before {
+  content: '\e860';
+}
+
+.icon-crown:before {
+  content: '\e861';
+}
+
+.icon-drag:before {
+  content: '\e862';
+}
+
+.icon-desktop:before {
+  content: '\e863';
+}
+
+.icon-gift:before {
+  content: '\e864';
+}
+
+.icon-stop:before {
+  content: '\e865';
+}
+
+.icon-fire:before {
+  content: '\e866';
+}
+
+.icon-thunderbolt:before {
+  content: '\e867';
+}
+
+.icon-mail-fill:before {
+  content: '\e86f';
+}
+
+.icon-printer-fill:before {
+  content: '\e870';
+}
+
+.icon-setting-fill:before {
+  content: '\e871';
+}
+
+.icon-USB-fill:before {
+  content: '\e872';
+}
+
+.icon-antdesign:before {
+  content: '\e879';
+}
+
+.icon-IE:before {
+  content: '\e87a';
+}
+
+.icon-HTML:before {
+  content: '\e87d';
+}
+
+.icon-apple:before {
+  content: '\e87e';
+}
+
+.icon-android:before {
+  content: '\e87f';
+}
+
+.icon-windows:before {
+  content: '\e880';
+}
+
+.icon-zoomout:before {
+  content: '\e897';
+}
+
+.icon-apartment:before {
+  content: '\e898';
+}
+
+.icon-audio:before {
+  content: '\e899';
+}
+
+.icon-robot:before {
+  content: '\e89a';
+}
+
+.icon-zoomin:before {
+  content: '\e89b';
+}
+
+.icon-robot-fill:before {
+  content: '\e8e8';
+}
+
+.icon-bug-fill:before {
+  content: '\e8e9';
+}
+
+.icon-bug:before {
+  content: '\e8ea';
+}
+
+.icon-audiostatic:before {
+  content: '\e8eb';
+}
+
+.icon-comment:before {
+  content: '\e8ec';
+}
+
+.icon-signal-fill:before {
+  content: '\e8ed';
+}
+
+.icon-videocameraadd:before {
+  content: '\e8ee';
+}
+
+.icon-switchuser:before {
+  content: '\e8ef';
+}
+
+.icon-appstoreadd:before {
+  content: '\e8f0';
+}
+
+.icon-search:before {
+  content: '\e8f1';
+}
+
+.icon-woman:before {
+  content: '\e8f2';
+}
+
+.icon-plus:before {
+  content: '\e8fe';
+}
+
+.icon-eyeclose-fill:before {
+  content: '\e8ff';
+}
+
+.icon-eye-close:before {
+  content: '\e900';
+}
+
+.icon-clear:before {
+  content: '\e901';
+}
+
+.icon-rotate-left:before {
+  content: '\e902';
+}
+
+.icon-rotate-right:before {
+  content: '\e903';
+}
+
+.icon-insertrowbelow:before {
+  content: '\e904';
+}
+
+.icon-insertrowabove:before {
+  content: '\e905';
+}
+
+.icon-table1:before {
+  content: '\e906';
+}
+
+.icon-solit-cells:before {
+  content: '\e907';
+}
+
+.icon-formatpainter:before {
+  content: '\e908';
+}
+
+.icon-insertrowright:before {
+  content: '\e909';
+}
+
+.icon-formatpainter-fill:before {
+  content: '\e90a';
+}
+
+.icon-insertrowleft:before {
+  content: '\e90b';
+}
+
+.icon-translate:before {
+  content: '\e90c';
+}
+
+.icon-deleterow:before {
+  content: '\e90d';
+}
+
+.icon-sisternode:before {
+  content: '\e90e';
+}
+
+.icon-Field-number:before {
+  content: '\e90f';
+}
+
+.icon-Field-String:before {
+  content: '\e910';
+}
+
+.icon-Function:before {
+  content: '\e911';
+}
+
+.icon-Field-time:before {
+  content: '\e912';
+}
+
+.icon-GIF:before {
+  content: '\e913';
+}
+
+.icon-Partition:before {
+  content: '\e914';
+}
+
+.icon-index:before {
+  content: '\e915';
+}
+
+.icon-Storedprocedure:before {
+  content: '\e916';
+}
+
+.icon-Field-Binary:before {
+  content: '\e917';
+}
+
+.icon-Console-SQL:before {
+  content: '\e918';
+}
+
+.icon-icon-test:before {
+  content: '\e919';
+}
+
+.icon-aim:before {
+  content: '\e91a';
+}
+
+.icon-compress:before {
+  content: '\e91b';
+}
+
+.icon-expend:before {
+  content: '\e91c';
+}
+
+.icon-folder-view:before {
+  content: '\e91d';
+}
+
+.icon-file-GIF:before {
+  content: '\e91e';
+}
+
+.icon-group:before {
+  content: '\e91f';
+}
+
+.icon-send:before {
+  content: '\e920';
+}
+
+.icon-Report:before {
+  content: '\e921';
+}
+
+.icon-View:before {
+  content: '\e922';
+}
+
+.icon-shortcut:before {
+  content: '\e923';
+}
+
+.icon-ungroup:before {
+  content: '\e924';
+}
+
+.icon-edit-square:before {
+  content: '\e7c6';
+}
+
+.icon-export:before {
+  content: '\e7c7';
+}
+
+.icon-save:before {
+  content: '\e7c8';
+}
+
+.icon-appstore:before {
+  content: '\e7c9';
+}
+
+.icon-minus-square:before {
+  content: '\e7ca';
+}
+
+.icon-plus-square:before {
+  content: '\e7cb';
+}
+
+.icon-right-square:before {
+  content: '\e7cc';
+}
+
+.icon-wallet:before {
+  content: '\e7cd';
+}
+
+.icon-adduser:before {
+  content: '\e7ce';
+}
+
+.icon-deleteteam:before {
+  content: '\e7cf';
+}
+
+.icon-deleteuser:before {
+  content: '\e7d0';
+}
+
+.icon-addteam:before {
+  content: '\e7d1';
+}
+
+.icon-user:before {
+  content: '\e7d2';
+}
+
+.icon-team:before {
+  content: '\e7d3';
+}
+
+.icon-areachart:before {
+  content: '\e7d4';
+}
+
+.icon-linechart:before {
+  content: '\e7d5';
+}
+
+.icon-barchart:before {
+  content: '\e7d6';
+}
+
+.icon-pointmap:before {
+  content: '\e7d7';
+}
+
+.icon-container:before {
+  content: '\e7d8';
+}
+
+.icon-database:before {
+  content: '\e7d9';
+}
+
+.icon-sever:before {
+  content: '\e7da';
+}
+
+.icon-mobile:before {
+  content: '\e7db';
+}
+
+.icon-tablet:before {
+  content: '\e7dc';
+}
+
+.icon-redenvelope:before {
+  content: '\e7dd';
+}
+
+.icon-book:before {
+  content: '\e7de';
+}
+
+.icon-filedone:before {
+  content: '\e7df';
+}
+
+.icon-reconciliation:before {
+  content: '\e7e0';
+}
+
+.icon-file-exception:before {
+  content: '\e7e1';
+}
+
+.icon-filesync:before {
+  content: '\e7e2';
+}
+
+.icon-filesearch:before {
+  content: '\e7e3';
+}
+
+.icon-solution:before {
+  content: '\e7e4';
+}
+
+.icon-fileprotect:before {
+  content: '\e7e5';
+}
+
+.icon-file-add:before {
+  content: '\e7e6';
+}
+
+.icon-file-excel:before {
+  content: '\e7e7';
+}
+
+.icon-file-exclamation:before {
+  content: '\e7e8';
+}
+
+.icon-file-pdf:before {
+  content: '\e7e9';
+}
+
+.icon-file-image:before {
+  content: '\e7ea';
+}
+
+.icon-file-markdown:before {
+  content: '\e7eb';
+}
+
+.icon-file-ppt:before {
+  content: '\e7ec';
+}
+
+.icon-file-word:before {
+  content: '\e7ed';
+}
+
+.icon-file:before {
+  content: '\e7ee';
+}
+
+.icon-file-zip:before {
+  content: '\e7ef';
+}
+
+.icon-file-text:before {
+  content: '\e7f0';
+}
+
+.icon-file-copy:before {
+  content: '\e7f1';
+}
+
+.icon-snippets:before {
+  content: '\e7f2';
+}
+
+.icon-audit:before {
+  content: '\e7f3';
+}
+
+.icon-diff:before {
+  content: '\e7f4';
+}
+
+.icon-Batchfolding:before {
+  content: '\e7f5';
+}
+
+.icon-securityscan:before {
+  content: '\e7f6';
+}
+
+.icon-propertysafety:before {
+  content: '\e7f7';
+}
+
+.icon-safetycertificate:before {
+  content: '\e7f8';
+}
+
+.icon-insurance:before {
+  content: '\e7f9';
+}
+
+.icon-alert:before {
+  content: '\e7fa';
+}
+
+.icon-delete:before {
+  content: '\e7fb';
+}
+
+.icon-hourglass:before {
+  content: '\e7fc';
+}
+
+.icon-bulb:before {
+  content: '\e7fd';
+}
+
+.icon-bell:before {
+  content: '\e7fe';
+}
+
+.icon-trophy:before {
+  content: '\e7ff';
+}
+
+.icon-rest:before {
+  content: '\e800';
+}
+
+.icon-USB:before {
+  content: '\e801';
+}
+
+.icon-skin:before {
+  content: '\e802';
+}
+
+.icon-home:before {
+  content: '\e803';
+}
+
+.icon-bank:before {
+  content: '\e804';
+}
+
+.icon-filter:before {
+  content: '\e805';
+}
+
+.icon-like:before {
+  content: '\e806';
+}
+
+.icon-unlike:before {
+  content: '\e807';
+}
+
+.icon-close-circle:before {
+  content: '\e782';
+}
+
+.icon-frown:before {
+  content: '\e783';
+}
+
+.icon-info-circle:before {
+  content: '\e784';
+}
+
+.icon-left-circle:before {
+  content: '\e785';
+}
+
+.icon-down-circle:before {
+  content: '\e786';
+}
+
+.icon-EURO:before {
+  content: '\e787';
+}
+
+.icon-copyright:before {
+  content: '\e788';
+}
+
+.icon-minus-circle:before {
+  content: '\e789';
+}
+
+.icon-meh:before {
+  content: '\e78a';
+}
+
+.icon-plus-circle:before {
+  content: '\e78b';
+}
+
+.icon-play-circle:before {
+  content: '\e78c';
+}
+
+.icon-question-circle:before {
+  content: '\e78d';
+}
+
+.icon-Pound:before {
+  content: '\e78e';
+}
+
+.icon-right-circle:before {
+  content: '\e78f';
+}
+
+.icon-smile:before {
+  content: '\e790';
+}
+
+.icon-trademark:before {
+  content: '\e791';
+}
+
+.icon-time-circle:before {
+  content: '\e792';
+}
+
+.icon-timeout:before {
+  content: '\e793';
+}
+
+.icon-earth:before {
+  content: '\e794';
+}
+
+.icon-YUAN:before {
+  content: '\e795';
+}
+
+.icon-up-circle:before {
+  content: '\e796';
+}
+
+.icon-warning-circle:before {
+  content: '\e797';
+}
+
+.icon-sync:before {
+  content: '\e798';
+}
+
+.icon-transaction:before {
+  content: '\e799';
+}
+
+.icon-undo:before {
+  content: '\e79a';
+}
 
-  code[class*="language-"],
-  pre[class*="language-"] {
-    text-shadow: none;
-  }
+.icon-redo:before {
+  content: '\e79b';
 }
 
-/* Code blocks */
-pre[class*="language-"] {
-  padding: 1em;
-  margin: .5em 0;
-  overflow: auto;
+.icon-reload:before {
+  content: '\e79c';
 }
 
-:not(pre)>code[class*="language-"],
-pre[class*="language-"] {
-  background: #f5f2f0;
+.icon-reloadtime:before {
+  content: '\e79d';
 }
 
-/* Inline code */
-:not(pre)>code[class*="language-"] {
-  padding: .1em;
-  border-radius: .3em;
-  white-space: normal;
+.icon-message:before {
+  content: '\e79e';
 }
 
-.token.comment,
-.token.prolog,
-.token.doctype,
-.token.cdata {
-  color: slategray;
+.icon-dashboard:before {
+  content: '\e79f';
 }
 
-.token.punctuation {
-  color: #999;
+.icon-issuesclose:before {
+  content: '\e7a0';
 }
 
-.namespace {
-  opacity: .7;
+.icon-poweroff:before {
+  content: '\e7a1';
 }
 
-.token.property,
-.token.tag,
-.token.boolean,
-.token.number,
-.token.constant,
-.token.symbol,
-.token.deleted {
-  color: #905;
+.icon-logout:before {
+  content: '\e7a2';
 }
 
-.token.selector,
-.token.attr-name,
-.token.string,
-.token.char,
-.token.builtin,
-.token.inserted {
-  color: #690;
+.icon-piechart:before {
+  content: '\e7a3';
 }
 
-.token.operator,
-.token.entity,
-.token.url,
-.language-css .token.string,
-.style .token.string {
-  color: #9a6e3a;
-  background: hsla(0, 0%, 100%, .5);
+.icon-setting:before {
+  content: '\e7a4';
 }
 
-.token.atrule,
-.token.attr-value,
-.token.keyword {
-  color: #07a;
+.icon-eye:before {
+  content: '\e7a5';
 }
 
-.token.function,
-.token.class-name {
-  color: #DD4A68;
+.icon-location:before {
+  content: '\e7a6';
 }
 
-.token.regex,
-.token.important,
-.token.variable {
-  color: #e90;
+.icon-check-circle:before {
+  content: '\e77d';
 }
 
-.token.important,
-.token.bold {
-  font-weight: bold;
+.icon-CI:before {
+  content: '\e77e';
 }
 
-.token.italic {
-  font-style: italic;
+.icon-Dollar:before {
+  content: '\e77f';
 }
 
-.token.entity {
-  cursor: help;
+.icon-compass:before {
+  content: '\e780';
 }

+ 1 - 0
src/components/Modal/src/BasicModal.vue

@@ -13,6 +13,7 @@
       <ModalHeader
         :helpMessage="getProps.helpMessage"
         :title="getMergeProps.title"
+        :subTitle="getProps.subTitle"
         @dblclick="handleTitleDbClick"
       />
     </template>

+ 20 - 3
src/components/Modal/src/components/ModalHeader.vue

@@ -1,7 +1,10 @@
 <template>
-  <BasicTitle :helpMessage="helpMessage" class="!font-semibold">
-    {{ title }}
-  </BasicTitle>
+  <span class="title-wrap">
+    <BasicTitle :helpMessage="helpMessage" class="!font-semibold">
+      {{ title }}
+    </BasicTitle>
+    <span v-if="!helpMessage && subTitle" class="subTitle">{{ subTitle }}</span>
+  </span>
 </template>
 <script lang="ts">
   import type { PropType } from 'vue';
@@ -16,7 +19,21 @@
         type: [String, Array] as PropType<string | string[]>,
       },
       title: { type: String },
+      subTitle: { type: String },
     },
     emits: ['dblclick'],
   });
 </script>
+<style scoped>
+  .title-wrap {
+    display: inline-flex;
+    align-items: baseline;
+  }
+
+  .subTitle {
+    font-size: 14px;
+    font-weight: 400;
+    color: #8290ac;
+    margin-left: 4px;
+  }
+</style>

+ 2 - 0
src/components/Modal/src/props.ts

@@ -71,6 +71,8 @@ export const basicProps = Object.assign({}, modalProps, {
 
   title: { type: String },
 
+  subTitle: { type: String },
+
   visible: { type: Boolean },
 
   width: [String, Number] as PropType<string | number>,

+ 81 - 63
src/components/XTImport/src/ImportModal.vue

@@ -34,19 +34,16 @@
               <span :class="['pointer', 'cnt-desc_link']" @click="downloadFile"> 文件模板</span
               >,文件大小不超过5M
             </div>
-          </div>
-          <div class="cnt-detail">
-            <Upload
-              class="button-style"
-              name="file"
-              :beforeUpload="handleBeforeUpload"
-              :maxCount="1"
-              :action="uploadApi"
-              :showUploadList="false"
-              @change="onChange"
-            >
-              <a-button type="primary"> 导入文件 </a-button>
-            </Upload>
+            <div class="cnt-detail">
+              <Upload
+                class="button-style"
+                name="file"
+                :before-upload="handleBeforeUpload"
+                :show-upload-list="false"
+              >
+                <a-button type="primary"> 导入文件 </a-button>
+              </Upload>
+            </div>
           </div>
         </div>
         <div v-if="importStatus == 'progress'">
@@ -102,16 +99,17 @@
 
 <script setup lang="ts">
   import { BasicModal, useModalInner } from '@/components/Modal';
-  import { useGlobSetting } from '/@/hooks/setting';
-  import { excelSheetDetail, getDownloadUrl, tempDownload } from '/@/api/common/index';
+  import { excelSheetDetail, getDownloadUrl } from '/@/api/common/index';
   import { downloadByBase64, downloadByUrl } from '/@/utils/file/download';
   import { reactive, ref } from 'vue';
   import { Progress, Upload } from 'ant-design-vue';
+  import { useMessage } from '/@/hooks/web/useMessage';
 
-  const globSetting = useGlobSetting();
-  // const uploadApi = globSetting.apiUrl + '/archives/patientBasic/import/batch';
-  const uploadApi = ref('');
+  const { createMessage } = useMessage();
+  const uploadApi = ref<any>();
+  const exportApi = ref<any>();
   const getTitle = ref('导入数据');
+  const isComplete = ref(0);
   const exportFileId = ref('');
   const timer = ref(null);
   const showOkBtn = ref(false);
@@ -140,7 +138,7 @@
     success: {
       icon: 'icon-xt-success',
       title: '数据导入成功',
-      desc: '<a @click="downloadFile"> 继续导入数据</a>',
+      desc: '',
       borderColor: '#DCDEE2',
       borderStyle: 'solid',
       backgroundColor: '#F4F6F9',
@@ -160,72 +158,92 @@
     total: 0,
   });
   const importProgress = ref(30);
-  const [registerModal, { setModalProps }] = useModalInner(async data => {
+  const [registerModal, { setModalProps, closeModal }] = useModalInner(async data => {
     console.log('🚀 ~ file: code.vue:21 ~ data:', data);
     setModalProps({ confirmLoading: false });
     getTitle.value = data?.title;
-    uploadApi.value = globSetting.apiUrl + data.uploadUrl;
+    uploadApi.value = data.importUrl;
+    exportApi.value = data.exportUrl;
   });
 
   async function handleSubmit() {
-    importStatus.value = 'default';
     showOkBtn.value = false;
     clearInterval(timer.value);
     timer.value = null;
+    importProgress.value = 30;
+    if (importStatus.value == 'success' || importStatus.value == 'fail') {
+      importStatus.value = 'default';
+      await closeModal();
+    } else {
+      importStatus.value = 'default';
+    }
   }
-  async function onChange(file) {
-    console.log('🚀 ~ file: importModal.vue:162 ~ onChange ~ onChange:', file);
-    // 单文件
-    const fileInfo = file.file;
-    // if (fileInfo.status === 'uploading') {
-    //   importStatus.value = 'progress';
-    //   importProgress.value = importProgress.value > 30 ? fileInfo.percent : 30;
-    // }
-    if (file.file.status === 'done') {
-      importStatus.value = 'progress';
-      const id = fileInfo.response.data;
-      if (id) {
-        timer.value = setInterval(async function () {
-          const importStats = await excelSheetDetail(id);
-          console.log('importStats', importStats);
-          importFail.fail = importStats.failCount;
-          importFail.success = importStats.successCount;
-          importFail.total = importStats.totalCount;
-          const percent =
-            (importStats.failCount + importStats.successCount) / importStats.totalCount;
-          // 进度条
-          importProgress.value = isNaN(percent) ? 30 : percent * 100 + 30;
-          console.log('进度条:', importProgress.value);
-          if (importStats.status.includes('parsing')) return;
-          const isFinish =
-            importStats.failCount + importStats.successCount == importStats.totalCount;
-          if (isFinish) {
-            clearInterval(timer.value);
-            if (importStats.failCount) {
-              importStatus.value = 'fail';
-              exportFileId.value = importStats.exportFileId;
-            } else {
-              importStatus.value = 'success';
-            }
+  async function startUpload(id) {
+    if (id) {
+      console.log('🚀 ~ file: ImportModal.vue:197 ~ onChange ~ id:', id);
+      timer.value = setInterval(async function () {
+        const importStats = await excelSheetDetail(id);
+        console.log('importStats', importStats);
+        // const percent = (importStats.failCount + importStats.successCount) / importStats.totalCount;
+        // 进度条
+        console.log('进度条:', importProgress.value);
+        if (
+          importStats.status == 'parsing' ||
+          importStats.status == 'parsingSuccess' ||
+          importStats.status == 'importing'
+        ) {
+          importProgress.value = 90;
+          return;
+        }
+        if (importStats.status == 'importFail') {
+          clearInterval(timer.value);
+          importStatus.value = 'fail';
+          createMessage.error('取消导入');
+          return;
+        }
+        if (importStats.status == 'importSuccess') {
+          importProgress.value = 100;
+          setTimeout(function () {
+            importStatus.value = 'success';
             showOkBtn.value = true;
+            clearInterval(timer.value);
+            exportFileId.value = importStats.exportFileId;
+            importFail.fail = importStats.failCount;
+            importFail.success = importStats.successCount;
+            importFail.total = importStats.totalCount;
             importProgress.value = 30;
-          }
-        }, 1000 * 5);
-      }
+          }, 1000 * 1);
+        }
+      }, 1000 * 3);
     }
   }
   async function handleBeforeUpload(file) {
     console.log('file', file);
-    // fileUpload.value = file;
+    importStatus.value = 'progress';
+    const res = await uploadApi.value(
+      {
+        data: {},
+        file,
+        filename: file.name,
+      },
+      async function onUploadProgress(progressEvent: ProgressEvent) {
+        isComplete.value = ((progressEvent.loaded / progressEvent.total) * 100) | 0;
+      },
+    );
+    if (isComplete.value == 100) {
+      importProgress.value = 50;
+      await startUpload(res.data.data);
+      isComplete.value = 0;
+    }
+    return false;
   }
   async function exportExcel() {
     const res = await getDownloadUrl(exportFileId.value);
-    console.log('res', res);
+    // console.log('res', res);
     downloadByUrl({ url: res });
   }
   async function downloadFile() {
-    console.log('🚀 ~ file: importModal.vue:96 ~ downloadFile ~ downloadFile:');
-    const res = await tempDownload([]);
+    const res = await exportApi.value([]);
     downloadByBase64(res.base64, res.fileName);
   }
 </script>

+ 1 - 1
src/design/theme.less

@@ -57,7 +57,7 @@ html[data-theme='light'] {
 }
 .ant-table-tbody > tr > td {
   border-bottom: 1px solid #ebedf0 !important;
-  border-right: 1px solid #ebedf0 !important;
+  border-right: 0 solid #ebedf0 !important;
 }
 .fan-basic-table-row__striped td {
   background-color: #f7f7fa !important;

+ 0 - 2
src/utils/file/base64Conver.ts

@@ -6,7 +6,6 @@ export function dataURLtoBlob(base64Buf: string): Blob {
   const arr = base64Buf.split(',');
   if (arr.length == 1) {
     const typeItem = arr[0];
-    debugger;
     // const mime = typeItem.match(/:(.*?);/)![1];
     const bstr = window.atob(typeItem);
     let n = bstr.length;
@@ -19,7 +18,6 @@ export function dataURLtoBlob(base64Buf: string): Blob {
     });
   } else {
     const typeItem = arr[0];
-    debugger;
     const mime = typeItem.match(/:(.*?);/)![1];
     const bstr = window.atob(arr[1]);
     let n = bstr.length;

+ 0 - 1
src/utils/http/axios/Axios.ts

@@ -143,7 +143,6 @@ export class VAxios {
         formData.append(key, params.data![key]);
       });
     }
-
     return this.axiosInstance.request<T>({
       ...config,
       method: 'POST',

+ 1 - 0
src/views/biz/archives/medicalDocuments/index.vue

@@ -191,6 +191,7 @@
     top: -16px;
 
     &-nav {
+      min-width: 320px;
       border-right: 1px solid #f6f8fa;
     }
 

+ 64 - 0
src/views/demo/tab/index.vue

@@ -19,6 +19,20 @@
     <div class="flex">
       <Sift :data="siftData" />
     </div>
+    <div class="custome-tab">
+      <a-tabs v-model:activeKey="activeKey">
+        <a-tab-pane key="1" tab="Tab 1">Content of Tab Pane 1</a-tab-pane>
+        <a-tab-pane key="2" tab="Tab 2" force-render>Content of Tab Pane 2</a-tab-pane>
+        <a-tab-pane key="3" tab="Tab 3">Content of Tab Pane 3</a-tab-pane>
+      </a-tabs>
+    </div>
+    <div class="tab">
+      <div class="tab-item tab-item-first--selected"> 业务报价 </div>
+      <div class="tab-item"> 业务报价 </div>
+      <div class="tab-item"> 其他测试 </div>
+      <div class="tab-item"> 其他测试 </div>
+      <div class="tab-item tab-item--selected"> 其他测试 </div>
+    </div>
   </div>
 </template>
 
@@ -31,6 +45,7 @@
 
   const tabSelected = ref('0');
   const dataSource = ref([]);
+  const activeKey = ref('1');
   const siftData = [
     {
       field: 'gender',
@@ -202,4 +217,53 @@
       cursor: pointer;
     }
   }
+
+  .tab {
+    background-color: #f6f7fb;
+    // height: 48px;
+    display: flex;
+
+    &-item {
+      width: 200px;
+      height: 60px;
+      text-align: center;
+      line-height: 4.8;
+      font-size: 16px;
+      color: #222a3d;
+      cursor: pointer;
+      background-image: url('/@/assets/images/tabm.png');
+      background-size: cover;
+      margin-left: -28px;
+      transition: all 0.32s ease-in-out;
+
+      &:first-child {
+        background-image: url('/@/assets/images/tab.png');
+        margin-left: -14px;
+
+        &:hover {
+          background-image: url('/@/assets/images/tab-selected.png') !important;
+          z-index: 29;
+        }
+      }
+
+      &:last-child {
+        background-image: url('/@/assets/images/tabl.png');
+      }
+
+      &-first--selected {
+        background-image: url('/@/assets/images/tab-selected.png') !important;
+        z-index: 19;
+      }
+
+      &--selected {
+        background-image: url('/@/assets/images/tabm-selected.png') !important;
+        z-index: 19;
+      }
+
+      &:hover {
+        background-image: url('/@/assets/images/tabm-selected.png') !important;
+        z-index: 29;
+      }
+    }
+  }
 </style>

+ 3 - 1
src/views/demo/title/ShortcutModal.vue

@@ -1,6 +1,7 @@
 <template>
   <BasicModal
     :title="getTitle"
+    :subTitle="getSubTitle"
     :canFullscreen="false"
     @register="registerModal"
     @ok="handleSubmit"
@@ -31,11 +32,12 @@
   import { reactive } from 'vue';
   import { ref } from 'vue';
   const emit = defineEmits(['success']);
-  const getTitle = computed(() => '快捷入口(已选' + count.curr + '/' + count.total + ')');
+  const getTitle = computed(() => '快捷入口');
   const count = reactive({
     total: 4,
     curr: 1,
   });
+  const getSubTitle = computed(() => '(已选' + count.curr + '/' + count.total + ')');
   const disabled = ref<boolean>(false);
   const shortcutData = ref([
     {

+ 6 - 2
src/views/demo/title/index.vue

@@ -44,7 +44,10 @@
   import { ImportModal } from '/@/components/XTImport/index';
   // import { TransitionPresets, useTransition } from '@vueuse/core';
   import { useModal } from '/@/components/Modal';
-  import { Api } from '/@/api/biz/archives/patientBasicApi';
+  import {
+    archivesPatientBasicExport,
+    archivesPatientBasicImportBatch,
+  } from '/@/api/biz/archives/patientBasicApi';
   import ShortcutModal from './ShortcutModal.vue';
 
   const [registerModal, { openModal }] = useModal();
@@ -154,7 +157,8 @@
   function showImport() {
     openModal(true, {
       title: '导入数据111',
-      uploadUrl: Api.archivesPatientBasicImportBatch,
+      importUrl: archivesPatientBasicImportBatch,
+      exportUrl: archivesPatientBasicExport,
     });
   }
   function showShortcut() {