unify-external-plugin-platform 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/README.md +49 -1
  2. package/docs/.vuepress/config.js +46 -0
  3. package/docs/.vuepress/public/logo.png +0 -0
  4. package/docs/README.md +15 -0
  5. package/docs/guide/changelog.md +1 -0
  6. package/docs/guide/installation.md +10 -0
  7. package/docs/guide/quickstart.md +26 -0
  8. package/docs/plugin/README.md +1 -0
  9. package/docs/plugin/empty.md +1 -0
  10. package/package.json +6 -3
  11. package/packages/id-card-reader-demo/index.ts +9 -0
  12. package/packages/id-card-reader-demo/src/id-card-reader-demo.vue +142 -0
  13. package/packages/index.js +29 -25
  14. package/packages/{ZSEmpty/src/assets → scanner-high-camera-jieyu}/images/img_blank_empty.png +0 -0
  15. package/packages/scanner-high-camera-jieyu/index.ts +14 -0
  16. package/packages/scanner-high-camera-jieyu/src/component/scanner-high-camera-component.vue +292 -0
  17. package/packages/scanner-high-camera-jieyu/src/scanner-high-camera-jieyu.vue +174 -0
  18. package/packages/{ZSEmpty → zs-empty}/index.ts +9 -9
  19. package/packages/zs-empty/src/assets/images/img_blank_empty.png +0 -0
  20. package/packages/{ZSEmpty/src/index.vue → zs-empty/src/zs-empty.vue} +42 -42
  21. package/public/index.html +6 -0
  22. package/src/App.vue +6 -23
  23. package/src/assets/images/reg-developing.png +0 -0
  24. package/src/components/404.vue +17 -0
  25. package/src/main.ts +22 -22
  26. package/src/router/id-card-reader/id-card-reader.ts +19 -0
  27. package/src/router/index.ts +21 -2
  28. package/src/router/scan/scan.ts +19 -0
  29. package/src/views/HomeView.vue +94 -2
  30. package/src/views/id-card-reader/id-card-reader-page.vue +139 -0
  31. package/src/views/id-card-reader/model/conatant/id-card-form-attr.ts +31 -0
  32. package/src/views/id-card-reader/model/vo/id-card.ts +44 -0
  33. package/src/views/layout/home-layout.vue +72 -0
  34. package/src/views/layout/model/menu-data.ts +29 -0
  35. package/src/views/scan/scan-page.vue +56 -0
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @author: lvcy
3
+ * @date: 2022-12-30
4
+ * @description:id-card-reader
5
+ */
6
+ import {RouteConfig} from "vue-router";
7
+
8
+ const IdCardReaderRouterList: RouteConfig[] = [
9
+ {
10
+ path: 'id-card-reader',
11
+ name: 'id-card-reader-page',
12
+ meta: {
13
+ title: '身份证读卡器',
14
+ },
15
+ component: () => import('@/views/id-card-reader/id-card-reader-page.vue')
16
+ },
17
+ ]
18
+
19
+ export default IdCardReaderRouterList;
@@ -1,15 +1,34 @@
1
1
  import Vue from 'vue'
2
2
  import VueRouter, { RouteConfig } from 'vue-router'
3
3
  import HomeView from '../views/HomeView.vue'
4
+ import IdCardReaderRouterList from "@/router/id-card-reader/id-card-reader";
5
+ import ScanRouterList from "@/router/scan/scan";
4
6
 
5
7
  Vue.use(VueRouter)
6
8
 
7
9
  const routes: Array<RouteConfig> = [
8
10
  {
9
11
  path: '/',
10
- name: 'home',
11
- component: HomeView
12
+ redirect: '/home',
12
13
  },
14
+ {
15
+ path: '/home',
16
+ name: 'home-layout',
17
+ component: () => import(/* webpackChunkName: "about" */ '../views/layout/home-layout.vue'),
18
+ children: [
19
+ ...IdCardReaderRouterList,
20
+ ...ScanRouterList,
21
+ { path: '404', meta: { title: '统一对外插件平台', errorPage: true }, component: () => import('@/components/404.vue') },
22
+ { path: '**', redirect: '404' },
23
+ ]
24
+ },
25
+ ...[
26
+ ...IdCardReaderRouterList,
27
+ ...ScanRouterList
28
+ ].map(item => ({
29
+ ...item,
30
+ path: `/${item.path}`
31
+ })),
13
32
  {
14
33
  path: '/about',
15
34
  name: 'about',
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @author: lvcy
3
+ * @date: 2023-02-07
4
+ * @description:scan
5
+ */
6
+ import {RouteConfig} from "vue-router";
7
+
8
+ const ScanRouterList: RouteConfig[] = [
9
+ {
10
+ path: 'scan',
11
+ name: 'scan-page',
12
+ meta: {
13
+ title: '扫描设备',
14
+ },
15
+ component: () => import('@/views/scan/scan-page.vue')
16
+ },
17
+ ]
18
+
19
+ export default ScanRouterList;
@@ -1,17 +1,109 @@
1
1
  <template>
2
2
  <div class="home">
3
- <z-s-empty empty-tip="没有数据组件"></z-s-empty>
3
+ <!-- <z-s-empty empty-tip="没有数据组件"></z-s-empty>-->
4
+ <id-card-reader-demo
5
+ type="text"
6
+ tip="身份证读卡器"
7
+ @click="handleAction"
8
+ ></id-card-reader-demo>
9
+ <id-card-reader-demo
10
+ type="primary"
11
+ @click="handleAction"
12
+ >身份证读卡器</id-card-reader-demo>
13
+
14
+
15
+ <el-input
16
+ style="width: 160px;"
17
+ placeholder="请输入内容"
18
+ v-model="idCardData.info.name">
19
+ <template slot="suffix">
20
+ <id-card-reader-demo
21
+ type="text"
22
+ tip="身份证读卡器"
23
+ @click="handleAction"
24
+ ></id-card-reader-demo>
25
+ </template>
26
+ </el-input>
27
+
28
+ <el-button type="default" @click="resetData">重置</el-button>
29
+
30
+ <div class="" v-if="idCardData.headImage">
31
+ <p>姓名: {{ idCardData.info.name }}</p>
32
+ <p>性别: {{ idCardData.info.sex }}</p>
33
+ <p>民族: {{ idCardData.info.nation }}</p>
34
+ <p>出生日期: {{ idCardData.info.birthday }}</p>
35
+ <p>地址: {{ idCardData.info.address }}</p>
36
+ <p>证件号码: {{ idCardData.info.cardId }}</p>
37
+ <p>签发机关: {{ idCardData.info.police }}</p>
38
+ <p>有效期开始: {{ idCardData.info.validStart }}</p>
39
+ <p>有效期结束: {{ idCardData.info.validEnd }}</p>
40
+ <img :src="idCardData.headImage" style="width: 120px;border: 1px solid #cccccc">
41
+ </div>
4
42
  </div>
5
43
  </template>
6
44
 
7
45
  <script lang="ts">
8
46
  import { Component, Vue } from 'vue-property-decorator';
9
47
  import HelloWorld from '@/components/HelloWorld.vue'; // @ is an alias to /examples
48
+ /**
49
+ * 身份证信息
50
+ *
51
+ */
52
+ export interface IDCard {
53
+ /** 身份证信息 */
54
+ info: IDCardInfo;
55
+ /** 身份证照片 */
56
+ headImage?: string;
57
+ }
58
+
59
+ /**
60
+ * 身份证详细信息
61
+ *
62
+ */
63
+ export interface IDCardInfo {
64
+ /** 姓名 */
65
+ name: string;
66
+ /** 性别 */
67
+ sex: string;
68
+ /** 民族 */
69
+ nation: string;
70
+ /** 出生日期 */
71
+ birthday: string;
72
+ /** 地址 */
73
+ address: string;
74
+ /** 证件号码 */
75
+ cardId: string;
76
+ /** 签发机关 */
77
+ police?: string;
78
+ /** 有效期开始 */
79
+ validStart?: any;
80
+ /** 有效期结束 */
81
+ validEnd?: any;
82
+ /** 性别编码 */
83
+ sexCode?: string;
84
+ /** 民族编码 */
85
+ nationCode?: string;
86
+ }
10
87
 
11
88
  @Component({
12
89
  components: {
13
90
  HelloWorld,
14
91
  },
15
92
  })
16
- export default class HomeView extends Vue {}
93
+ export default class HomeView extends Vue {
94
+
95
+ idCardData: IDCard = {info: {}} as IDCard;
96
+
97
+ handleAction(data: IDCard) {
98
+ this.idCardData = data;
99
+ }
100
+
101
+ resetData() {
102
+ this.idCardData = {info: {}} as IDCard;
103
+ }
104
+ }
17
105
  </script>
106
+
107
+ <style lang="scss">
108
+
109
+ </style>
@@ -0,0 +1,139 @@
1
+ <!--
2
+ - @author: lvcy
3
+ - @date: 2022-12-30
4
+ - @description:id-card-reader-page
5
+ -->
6
+ <template>
7
+ <div class="id-card-reader-page">
8
+ <h2>身份证读卡器</h2>
9
+ <div class="id-card-reader-content">
10
+ <div class="form-content">
11
+ <el-form ref="form" :model="idCardData" label-width="100px">
12
+ <el-form-item label="机器型号">
13
+ <el-select v-model="readerType" placeholder="请选择机器型号" style="width: 100%">
14
+ <el-option
15
+ v-for="item in selectOptions"
16
+ :key="item.value"
17
+ :label="item.label"
18
+ :value="item.value">
19
+ </el-option>
20
+ </el-select>
21
+ </el-form-item>
22
+ <template
23
+ v-for="item in formItemList"
24
+ >
25
+ <el-col :span="item.span || 12" :key="item.name">
26
+ <el-form-item
27
+ v-if="item.type === 'other'"
28
+ :label="item.label"
29
+ :placeholder="'请输入'+item.label"
30
+ >
31
+ <el-input v-model="idCardData.info[item.name]">
32
+ <template slot="suffix">
33
+ <id-card-reader-demo
34
+ v-if="readerType === idCardReaderType.Demo"
35
+ type="text"
36
+ tip="身份证读卡器"
37
+ @click="handleAction"
38
+ ></id-card-reader-demo>
39
+ </template>
40
+ </el-input>
41
+ </el-form-item>
42
+ <el-form-item
43
+ v-else
44
+ :key="item.name"
45
+ :label="item.label"
46
+ :placeholder="'请输入'+item.label"
47
+ >
48
+ <el-input v-model="idCardData.info[item.name]"></el-input>
49
+ </el-form-item>
50
+ </el-col>
51
+ </template>
52
+ </el-form>
53
+ </div>
54
+ <div class="image-content">
55
+ <img :src="idCardData.headImage" v-if="idCardData.headImage">
56
+ <span v-else>
57
+ <i class="el-icon-user-solid"></i>
58
+ </span>
59
+
60
+ </div>
61
+ </div>
62
+ <div class="action-content" style="text-align: right">
63
+ <!-- 测试 -->
64
+ <id-card-reader-demo
65
+ v-if="readerType === idCardReaderType.Demo"
66
+ type="primary"
67
+ @click="handleAction"
68
+ >身份证读卡器</id-card-reader-demo>
69
+ <!-- 普天 -->
70
+ <!-- 精伦 -->
71
+ <el-button type="default" @click="resetData">重置</el-button>
72
+ </div>
73
+
74
+ </div>
75
+ </template>
76
+
77
+ <script lang="ts">
78
+
79
+ import {Component, Vue} from "vue-property-decorator";
80
+ import {IDCard} from "@/views/id-card-reader/model/vo/id-card";
81
+ import {
82
+ IdCardFormItemList,
83
+ IdCardReaderType,
84
+ IdCardReaderTypeOptions
85
+ } from "@/views/id-card-reader/model/conatant/id-card-form-attr";
86
+
87
+ @Component({
88
+ name: "id-card-reader-page"
89
+ })
90
+ export default class IdCardReaderPage extends Vue {
91
+ idCardData: IDCard = {info: {}} as IDCard;
92
+
93
+ formItemList = IdCardFormItemList;
94
+
95
+ readerType = '';
96
+
97
+ selectOptions = IdCardReaderTypeOptions;
98
+
99
+ idCardReaderType = IdCardReaderType;
100
+
101
+
102
+ handleAction(data: IDCard) {
103
+ this.idCardData = data;
104
+ }
105
+
106
+ resetData() {
107
+ this.idCardData = {info: {}} as IDCard;
108
+ }
109
+ }
110
+ </script>
111
+
112
+ <style scoped lang="scss">
113
+ .id-card-reader-page {
114
+ .id-card-reader-content {
115
+ display: flex;
116
+ margin-top: 20px;
117
+ .form-content {
118
+ width: 800px;
119
+ }
120
+ .image-content {
121
+ margin-left: 15px;
122
+ img,
123
+ span {
124
+ display: inline-block;
125
+ width: 120px;
126
+ border: 1px solid #cccccc;
127
+ text-align: center;
128
+ }
129
+ i {
130
+ font-size: 100px;
131
+ margin: 20px 0;
132
+ }
133
+ }
134
+ }
135
+ .action-content {
136
+ width: 800px;
137
+ }
138
+ }
139
+ </style>
@@ -0,0 +1,31 @@
1
+ /**
2
+ * @author: lvcy
3
+ * @date: 2022-12-30
4
+ * @description:id-card-form-attr
5
+ */
6
+
7
+ export enum IdCardReaderType {
8
+ Demo = 'demo',
9
+ PuTian = 'putian',
10
+ JingLun = 'jinglun'
11
+ }
12
+
13
+ export const IdCardReaderTypeOptions = [
14
+ { label: '测试', value: IdCardReaderType.Demo },
15
+ { label: '普天', value: IdCardReaderType.PuTian },
16
+ { label: '精伦', value: IdCardReaderType.JingLun},
17
+ ]
18
+
19
+ export const IdCardFormItemList = [
20
+ { name: 'name', label: '姓名', type: 'other' },
21
+ { name: 'cardId', label: '证件号码', },
22
+ { name: 'sex', label: '性别', },
23
+ { name: 'nation', label: '民族', },
24
+ { name: 'birthday', label: '出生日期', },
25
+ { name: 'police', label: '签发机关', },
26
+ { name: 'validStart', label: '有效期开始', },
27
+ { name: 'validEnd', label: '有效期结束', },
28
+ { name: 'sexCode', label: '性别编码', },
29
+ { name: 'nationCode', label: '民族编码', },
30
+ { name: 'address', label: '地址', span: 24},
31
+ ]
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @author: lvcy
3
+ * @date: 2022-12-30
4
+ * @description:id-card
5
+ */
6
+ /**
7
+ * 身份证信息
8
+ *
9
+ */
10
+ export interface IDCard {
11
+ /** 身份证信息 */
12
+ info: IDCardInfo;
13
+ /** 身份证照片 */
14
+ headImage?: string;
15
+ }
16
+
17
+ /**
18
+ * 身份证详细信息
19
+ *
20
+ */
21
+ export interface IDCardInfo {
22
+ /** 姓名 */
23
+ name: string;
24
+ /** 性别 */
25
+ sex: string;
26
+ /** 民族 */
27
+ nation: string;
28
+ /** 出生日期 */
29
+ birthday: string;
30
+ /** 地址 */
31
+ address: string;
32
+ /** 证件号码 */
33
+ cardId: string;
34
+ /** 签发机关 */
35
+ police?: string;
36
+ /** 有效期开始 */
37
+ validStart?: any;
38
+ /** 有效期结束 */
39
+ validEnd?: any;
40
+ /** 性别编码 */
41
+ sexCode?: string;
42
+ /** 民族编码 */
43
+ nationCode?: string;
44
+ }
@@ -0,0 +1,72 @@
1
+ <!--
2
+ - @author: lvcy
3
+ - @date: 2022-12-30
4
+ - @description:home-layout
5
+ -->
6
+ <template>
7
+ <el-container
8
+ class="home-layout"
9
+ >
10
+ <el-header>
11
+ <h2>统一对外插件平台Demo</h2>
12
+ </el-header>
13
+ <el-container>
14
+ <el-aside width="200px">
15
+
16
+ <el-menu
17
+ :default-active="activeIndex"
18
+ :default-openeds="openedMenuList"
19
+ class="el-menu-vertical-demo"
20
+ @select="handleSelectMenu"
21
+ >
22
+ <template v-for="menu in menuList">
23
+ <el-menu-item
24
+ :key="menu.index"
25
+ :index="menu.index">
26
+ <template slot="title">
27
+ <i :class="menu.icon"></i>
28
+ <span>{{ menu.title }}</span>
29
+ </template>
30
+ </el-menu-item>
31
+ </template>
32
+ </el-menu>
33
+ </el-aside>
34
+ <el-main>
35
+ <router-view/>
36
+ </el-main>
37
+ </el-container>
38
+ </el-container>
39
+ </template>
40
+
41
+ <script lang="ts">
42
+ import {Component, Vue} from "vue-property-decorator";
43
+ import {MenuDataList} from "@/views/layout/model/menu-data";
44
+
45
+ @Component({
46
+ name: "home-layout"
47
+ })
48
+ export default class HomeLayout extends Vue {
49
+
50
+ openedMenuList = [MenuDataList?.[0]?.index ?? '']
51
+
52
+ activeIndex = 'id-card-reader'
53
+ menuList = MenuDataList
54
+
55
+ created() {
56
+ this.$router.push(`/home/id-card-reader`)
57
+ }
58
+
59
+ handleSelectMenu(path: string) {
60
+ this.$router.push(`/home/${path}`)
61
+ }
62
+ }
63
+ </script>
64
+
65
+ <style lang="scss">
66
+ .home-layout {
67
+ height: 100%;
68
+ .el-main {
69
+ padding: 0 8px;
70
+ }
71
+ }
72
+ </style>
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @author: lvcy
3
+ * @date: 2022-12-30
4
+ * @description:menu-data
5
+ */
6
+
7
+ export interface MenuItemBase {
8
+ index: string,
9
+ title: string,
10
+ icon: string,
11
+ }
12
+
13
+ export interface MenuItem<T = any> extends MenuItemBase {
14
+ children?: MenuItem<T>[];
15
+ data?: T
16
+ }
17
+
18
+ export const MenuDataList: MenuItem[] = [
19
+ {
20
+ index: 'id-card-reader',
21
+ title: '身份证读卡器',
22
+ icon: 'el-icon-postcard',
23
+ },
24
+ {
25
+ index: 'scan',
26
+ title: '扫描设备',
27
+ icon: 'el-icon-picture-outline',
28
+ }
29
+ ]
@@ -0,0 +1,56 @@
1
+ <!--
2
+ - @author: lvcy
3
+ - @date: 2023-01-09
4
+ - @description:scan-page
5
+ -->
6
+ <template>
7
+ <div class="scan-page">
8
+ <div class="" style="margin-bottom: 30px">
9
+ <h3>按钮弹框模式:</h3>
10
+ <scanner-high-camera-jieyu
11
+ open-mode="dialog"
12
+ icon="el-icon-picture-outline"
13
+ label="影像扫描"
14
+ type="primary"
15
+ size="mini"
16
+ @send-scanner-result="getScannerResult"
17
+ ></scanner-high-camera-jieyu>
18
+ </div>
19
+ <!-- <scanner-high-camera-jieyu-->
20
+ <!-- @send-scanner-result="getScannerResultByIframeMode"-->
21
+ <!-- ></scanner-high-camera-jieyu>-->
22
+ </div>
23
+ </template>
24
+
25
+ <script lang="ts">
26
+ import {Component, Vue} from "vue-property-decorator";
27
+
28
+ @Component({
29
+ name: 'scan-page',
30
+ })
31
+ export default class ScanPage extends Vue {
32
+
33
+
34
+ getScannerResult(src: string) {
35
+ console.log('dialog=>', src)
36
+ }
37
+
38
+ getScannerResultByIframeMode(src: string) {
39
+ // console.log('iframe=>', src);
40
+ window.parent.postMessage({
41
+ type: 'scanner',
42
+ data: {
43
+ src: src
44
+ },
45
+ }, '*')
46
+ }
47
+
48
+
49
+ }
50
+ </script>
51
+
52
+ <style scoped lang="scss">
53
+ .scan-page {
54
+ height: 100%;
55
+ }
56
+ </style>