hayun-vite 1.0.0 → 1.2.0
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.
- package/assets/templates/mainTemplate.js +1 -1
- package/assets/templates/templAudiometry.js +1 -1
- package/assets/templates/templCombo.js +1 -1
- package/data/currentData.js +117 -0
- package/index.html +41 -63
- package/index.js +10 -6
- package/package.json +3 -7
- package/prac.html +42 -0
- package/src/Audiogram/dims_100.js +2 -2
- package/src/Form/Form.js +29 -10
- package/src/Forms/Forms.js +31 -11
- package/src/Forms/FormsUI.js +34 -0
- package/src/Header/Header.js +1 -1
- package/src/Header/Header_box.js +1 -1
- package/src/MultiText/MultiText.js +1 -1
- package/src/Reflex/Reflex.js +46 -2
- package/src/Reflex/ReflexUI.js +78 -0
- package/src/Reflex/units.js +1 -1
- package/src/Speech/Speech.js +56 -1
- package/src/Speech/SpeechUI.js +94 -0
- package/src/Speech/units.js +20 -2
- package/src/Tympanogram/Tympanogram.js +45 -1
- package/src/Tympanogram/TympanogramUI.js +166 -0
- package/src/Tympanogram/test.js +1 -1
- package/src/Tympanogram/units.js +1 -1
- package/src/main.js +11 -5
- package/style-font.css +10 -0
- package/styles-tailwind.css +14 -0
- package/styles.css +57 -178
- package/vite.config.js +7 -0
- package/assets/rasa.png +0 -0
- package/assets/templates/rasa_audiometry.jpg +0 -0
- package/assets/templates/rasa_tymp_reflex.jpg +0 -0
- package/src/Form/Form_box.js +0 -190
- package/src/Forms/ui.js +0 -52
- package/src/Speech/Speech_box.js +0 -119
- package/src/Speech/ui.js +0 -101
- package/src/components/SpeechUI.js +0 -111
- package/src/components/common/putG.js +0 -10
- package/src/components/common/putGrid.js +0 -31
- package/src/components/common/putLine.js +0 -16
- package/src/components/common/putPoint.js +0 -13
- package/src/components/common/putRect.js +0 -25
- package/src/components/common/putSVG.js +0 -14
- package/src/components/common/putText.js +0 -19
- package/src/components/common/putTopLayer.js +0 -18
- package/src/components/index.js +0 -12
- package/src/core/AppState.js +0 -36
- package/src/core/BaseComponent.js +0 -94
- package/src/core/README.md +0 -565
- package/src/core/Router.js +0 -74
- package/src/style.css +0 -243
|
@@ -97,7 +97,7 @@ const mainTemplate = {
|
|
|
97
97
|
|
|
98
98
|
defElements: function () {
|
|
99
99
|
let box = this['Header'].box
|
|
100
|
-
let style = ['user-select: none', 'direction: rtl', 'font-family:
|
|
100
|
+
let style = ['user-select: none', 'direction: rtl', 'font-family: Vazirmatn', 'font-size: 1mm'].join('; ')
|
|
101
101
|
box.elements = [
|
|
102
102
|
{ type: 'image', x: 10, y: 30 },
|
|
103
103
|
{ type: 'line', x1: 0, y1: box.height, x2: box.width, y2: box.height },
|
|
@@ -176,7 +176,7 @@ const templAudiometry = {
|
|
|
176
176
|
height = this.header.height = this.getHeight(this.header)
|
|
177
177
|
|
|
178
178
|
style = `
|
|
179
|
-
font-family:
|
|
179
|
+
font-family: Vazirmatn, Helvetica, sans-serif !important;
|
|
180
180
|
font-size: 1.5mm;
|
|
181
181
|
font-weight: bold;
|
|
182
182
|
text-anchor: start; /*تراز افقی*/
|
|
@@ -176,7 +176,7 @@ const templCombo = {
|
|
|
176
176
|
height = this.header.height = this.getHeight(this.header)
|
|
177
177
|
|
|
178
178
|
style = `
|
|
179
|
-
font-family:
|
|
179
|
+
font-family: Vazirmatn, Helvetica, sans-serif !important;
|
|
180
180
|
font-size: 1.5mm;
|
|
181
181
|
font-weight: bold;
|
|
182
182
|
text-anchor: start; /*تراز افقی*/
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
const officeData = {
|
|
2
|
+
name: "دفتر ارزیابی شنوایی و سمعک سروش",
|
|
3
|
+
// logo: "/static/media/Daco_1154502.04df6740fbd1f11c99f8.png",
|
|
4
|
+
logos:
|
|
5
|
+
[
|
|
6
|
+
"data:image/png;base64,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"
|
|
7
|
+
],
|
|
8
|
+
selectedLogoIndex: 0,
|
|
9
|
+
|
|
10
|
+
addresses: ["مشهد، خیابان عارف، عارف ۲، ساختمان سینا، طبقه اول"],
|
|
11
|
+
selectedAddressIndex: 0,
|
|
12
|
+
tels: ["051 38442592", "051 38445232"],
|
|
13
|
+
selectedTelIndex: 1,
|
|
14
|
+
audiologists: [
|
|
15
|
+
{
|
|
16
|
+
name: "مهدی",
|
|
17
|
+
lastName: "جاویدی فیروز طوسی",
|
|
18
|
+
gender: "مرد",
|
|
19
|
+
medicalCouncilNo: "ش ۷۵۴",
|
|
20
|
+
signature: "IMG1",
|
|
21
|
+
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: "محمد علی",
|
|
25
|
+
lastName: "بربری",
|
|
26
|
+
gender: "مرد",
|
|
27
|
+
medicalCouncilNo: "ش ۱۰۲۰",
|
|
28
|
+
signature: "IMG2",
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
selectedAudiologistIndex: 1,
|
|
32
|
+
audiometers: ["Pejvak Ava C952", "Zodiac Z1"],
|
|
33
|
+
selectedAudiometrIndex: 0,
|
|
34
|
+
tympanometers: ["Pejvak Ava Z71", "Intracoustic T34"],
|
|
35
|
+
selectedTympanometerIndex: 1,
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const patientData = {
|
|
39
|
+
name: "سید علی اکبر الزمان",
|
|
40
|
+
lastName: "پرنده بافقی یزدی",
|
|
41
|
+
gender: "مرد",
|
|
42
|
+
age: 75,
|
|
43
|
+
birthday: { year: 1356, month: 5, day: 3 },
|
|
44
|
+
nationalCode: "0321456546",
|
|
45
|
+
createDate: "2025/5/5", //تاریخ و ساعت ایجاد بیمار
|
|
46
|
+
updateDates: ["2025/6/5,16:32", "2025/6/5,16:32"],//آرایه تاریخ و ساعت بروزرسانی ها
|
|
47
|
+
|
|
48
|
+
sessions: [
|
|
49
|
+
{
|
|
50
|
+
createDate: new Date().toLocaleDateString("fa-IR"), //تاریخ و ساعت ایجاد نشست بیمار
|
|
51
|
+
updateDates: ["2025/6/5,16:32", "2025/6/5,16:32"], // آرایه تاریخ و ساعت بروزرسانی ها
|
|
52
|
+
age: 77, //سن بیمار در این نشست
|
|
53
|
+
referrer: "دکتر سید علی سرابی ", //ارجاعدهنده
|
|
54
|
+
history: {
|
|
55
|
+
description:
|
|
56
|
+
`کاهش شنوایی حسی عصبی ملایم تا متوسط در فرکانس بم تامیانه در گوش راست.
|
|
57
|
+
کاهش شنوایی آمیخته متوسط تا شدید در گوش چپ.`,
|
|
58
|
+
},
|
|
59
|
+
note: "", //رشته متن بلند یادداشت
|
|
60
|
+
audiogram: {
|
|
61
|
+
R: { R_AC: { 500: '25', 1000: '35', 2000: '45', 4000: '55', 8000: '60' } },
|
|
62
|
+
L: {
|
|
63
|
+
L_AC: { 500: '20', 1000: '35', 2000: '45', 4000: '55', 8000: '60' },
|
|
64
|
+
L_BC: { 500: '15', 1000: '30', 2000: '40', 4000: '50', 8000: '20' }
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
speech: {
|
|
68
|
+
R: { SAT: '25', SRT: '30', MCL: '55', UCL: '120', SDS: '98', },
|
|
69
|
+
L: { SAT: '15', SRT: '20', UCL: '110', SDS: '88', }
|
|
70
|
+
},
|
|
71
|
+
tympanogram: {
|
|
72
|
+
R: { type: "An", ECV: '2.5', SC: '1.50', MEP: '-50', G: 0.23 },
|
|
73
|
+
L: { type: "C5", SC: 0.10, MEP: -300, G: 0.32 },
|
|
74
|
+
},
|
|
75
|
+
reflex: {
|
|
76
|
+
R: {
|
|
77
|
+
ipsi: { 500: "125", 1000: "90", 2000: "NR", 4000: "NR" },
|
|
78
|
+
contra: { 500: "85", 1000: "90", 2000: "NR", 4000: '120' },
|
|
79
|
+
},
|
|
80
|
+
L: {
|
|
81
|
+
ipsi: { 500: "120", 1000: "90", 2000: "95", 4000: "NR" },
|
|
82
|
+
contra: { 500: "80", 1000: "90", 2000: "NR", 4000: '95' }
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
report: {
|
|
86
|
+
description:
|
|
87
|
+
`شرح لقمه شرح لقمه شرح لقمه
|
|
88
|
+
خط دوم خط دوم خط دوم خط دومپ`,
|
|
89
|
+
},
|
|
90
|
+
|
|
91
|
+
},
|
|
92
|
+
|
|
93
|
+
{
|
|
94
|
+
history: { description: "سرگیجه \n دورانی" },
|
|
95
|
+
audiogram: { R: { R_AC: { 500: 5 } }, L: { L_AC: { 500: 15 } } },
|
|
96
|
+
tympanogram: {},
|
|
97
|
+
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
{
|
|
101
|
+
audiogram: { R: { R_AC: { 500: 35 } }, L: { L_AC: { 500: 5 } } },
|
|
102
|
+
speech: { R: { SAT: 25, SDS: 100 } },
|
|
103
|
+
|
|
104
|
+
},
|
|
105
|
+
]
|
|
106
|
+
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const appSettingData = {
|
|
110
|
+
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const currentData = {
|
|
114
|
+
appSettingData, officeData, patientData
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export { currentData }
|
package/index.html
CHANGED
|
@@ -4,67 +4,9 @@
|
|
|
4
4
|
<head>
|
|
5
5
|
<meta charset="UTF-8" />
|
|
6
6
|
<link rel="icon" type="image/svg+xml" href="vite.svg" />
|
|
7
|
-
<link rel="stylesheet" href="
|
|
8
|
-
<
|
|
9
|
-
|
|
10
|
-
font-family: Vazir;
|
|
11
|
-
user-select: none;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
h1 {
|
|
15
|
-
margin: 1rem 0em 0em 0em
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
h2 {
|
|
19
|
-
margin: auto;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
p,
|
|
23
|
-
span,
|
|
24
|
-
label {
|
|
25
|
-
font:
|
|
26
|
-
1.3rem "Fira Sans",
|
|
27
|
-
sans-serif;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
h1 {
|
|
31
|
-
font: 2.5rem Vazir;
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
input[type="text"]:focus {
|
|
36
|
-
/* outline: none; */
|
|
37
|
-
/* removes the blue focus outline */
|
|
38
|
-
box-shadow: none;
|
|
39
|
-
/* removes any additional focus shadow */
|
|
40
|
-
/* border: none; */
|
|
41
|
-
/* optional: remove border if desired */
|
|
42
|
-
/* margin: 0; */
|
|
43
|
-
/* optional: reset margin if browser adds any */
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
label {
|
|
47
|
-
user-select: none;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
.center {
|
|
51
|
-
display: flex;
|
|
52
|
-
align-items: center;
|
|
53
|
-
justify-content: space-evenly;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
.blue {
|
|
57
|
-
color: blue
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
.red {
|
|
61
|
-
color: red;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
.border {
|
|
65
|
-
border: 1px solid green;
|
|
66
|
-
}
|
|
67
|
-
</style>
|
|
7
|
+
<link rel="stylesheet" href="style-font.css">
|
|
8
|
+
<link rel="stylesheet" href="styles.css">
|
|
9
|
+
<link rel="stylesheet" href="styles-tailwind.css">
|
|
68
10
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
69
11
|
<title>hayun</title>
|
|
70
12
|
</head>
|
|
@@ -72,20 +14,56 @@
|
|
|
72
14
|
<body>
|
|
73
15
|
|
|
74
16
|
<div id="app"></div>
|
|
17
|
+
<!-- <button id="log">Log Current Data</button> -->
|
|
75
18
|
|
|
19
|
+
<script type="module">
|
|
20
|
+
import { currentData } from "/data/currentData.js"
|
|
21
|
+
import speechUI from "/src/Speech/SpeechUI.js"
|
|
22
|
+
import formsUI from "/src/Forms/FormsUI.js"
|
|
23
|
+
import reflexUI from "/src/Reflex/ReflexUI.js"
|
|
76
24
|
|
|
25
|
+
const { appSettingData, officeData, patientData } = currentData
|
|
26
|
+
let data = patientData.sessions[0].speech
|
|
27
|
+
speechUI.draw({ containerId: '#app' })
|
|
28
|
+
speechUI.update({ data })
|
|
29
|
+
|
|
30
|
+
// فراخوانی متد آپدیت بدون پارامتر مقادیر وارد شده کاربر را به دیتاآبجکت جاری میفرستد
|
|
31
|
+
// setInterval(() => { speechUI.update() }, 3000);
|
|
32
|
+
|
|
33
|
+
// Accoustic Reflexes Section
|
|
34
|
+
data = patientData.sessions[0].reflex
|
|
35
|
+
reflexUI.draw({ containerId: '#app' })
|
|
36
|
+
reflexUI.update({ data })
|
|
37
|
+
|
|
38
|
+
// formsUI Section
|
|
39
|
+
// data = patientData.sessions[0]
|
|
40
|
+
// formsUI.draw({ containerId: '#app' })
|
|
41
|
+
// formsUI.update({ patientData, sessionIndex: 0 })
|
|
42
|
+
|
|
43
|
+
// setInterval(() => {
|
|
44
|
+
// formsUI.update({ patientData, sessionIndex: 0 })
|
|
45
|
+
// console.log('forms update!');
|
|
46
|
+
|
|
47
|
+
// }, 2000)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
// document.querySelector('#log').addEventListener('click', () => {
|
|
51
|
+
// console.log(data.R, data.L);
|
|
52
|
+
|
|
53
|
+
// })
|
|
77
54
|
|
|
78
|
-
<script>
|
|
79
55
|
|
|
80
56
|
</script>
|
|
81
57
|
|
|
82
58
|
<!-- <script type="module" src="/src/formInputs/ui.js"></script> -->
|
|
83
59
|
<!-- <script type="module" src="/src/Speech/ui.js"></script> -->
|
|
60
|
+
<!-- <script type="module" src="/src/Speech/speechUI-test.js"></script> -->
|
|
84
61
|
<!-- <script type="module" src="/src/Audiogram/ui.js"></script> -->
|
|
85
|
-
<script type="module" src="/src/main.js"></script>
|
|
62
|
+
<!-- <script type="module" src="/src/main.js"></script> -->
|
|
86
63
|
<!-- <script type="module" src="/src/Forms/ui.js"></script> -->
|
|
87
64
|
<!-- <script type="module" src="/src/Reflex/ui.js"></script> -->
|
|
88
65
|
<!-- <script type="module" src="/src/Tympanogram/ui.js"></script> -->
|
|
66
|
+
<!-- <script type="module" src="/src/Tympanogram/test.js"></script> -->
|
|
89
67
|
|
|
90
68
|
</body>
|
|
91
69
|
|
package/index.js
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import Audiogram from './src/Audiogram/Audiogram'
|
|
2
2
|
import dims from './src/Audiogram/dims'
|
|
3
|
-
import { officeData, patientData } from './assets/data/sampleData'
|
|
3
|
+
// import { officeData, patientData } from './assets/data/sampleData'
|
|
4
4
|
import Forms from './src/Forms/Forms'
|
|
5
5
|
import combo_template from './assets/templates/templCombo'
|
|
6
|
+
import './styles.css'
|
|
7
|
+
import formsUI from './src/Forms/FormsUI'
|
|
6
8
|
// import './src/style.css'
|
|
7
9
|
// import './src/Speech/ui.js'
|
|
10
|
+
import { currentData } from './data/currentData'
|
|
8
11
|
|
|
9
12
|
|
|
10
13
|
|
|
@@ -12,10 +15,11 @@ import combo_template from './assets/templates/templCombo'
|
|
|
12
15
|
// import rasa_tymp_reflex_template from './assets/templates/rasa_tymp_reflex'
|
|
13
16
|
|
|
14
17
|
import logo0 from './assets/logos/logo-0_mm_20w_22h_300p.png'
|
|
15
|
-
import logo1 from
|
|
18
|
+
import logo1 from './assets/logos/logo-1.png'
|
|
16
19
|
import logo2 from './assets/logos/logo-2.png'
|
|
17
20
|
import Speech from './src/Speech/Speech'
|
|
18
|
-
import {
|
|
21
|
+
// import { ReflexUI } from './src/components'
|
|
22
|
+
import speechUI from './src/Speech/SpeechUI'
|
|
19
23
|
|
|
20
24
|
const logos = [logo0, logo1, logo2]
|
|
21
25
|
|
|
@@ -23,7 +27,7 @@ const logos = [logo0, logo1, logo2]
|
|
|
23
27
|
|
|
24
28
|
|
|
25
29
|
export {
|
|
26
|
-
Audiogram, Forms, dims,
|
|
27
|
-
|
|
28
|
-
|
|
30
|
+
Audiogram, Forms, dims, currentData, combo_template,
|
|
31
|
+
logos, Speech, speechUI, formsUI
|
|
32
|
+
|
|
29
33
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hayun-vite",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"dev": "vite",
|
|
@@ -14,12 +14,8 @@
|
|
|
14
14
|
"description": "a big horse ",
|
|
15
15
|
"main": "index.js",
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"picocolors": "^1.1.1",
|
|
20
|
-
"postcss": "^8.5.1",
|
|
21
|
-
"rollup": "^4.34.6",
|
|
22
|
-
"source-map-js": "^1.2.1"
|
|
17
|
+
"@tailwindcss/vite": "^4.1.10",
|
|
18
|
+
"tailwindcss": "^4.1.10"
|
|
23
19
|
},
|
|
24
20
|
"author": "",
|
|
25
21
|
"license": "ISC"
|
package/prac.html
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="UTF-8">
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
7
|
+
<title>Document</title>
|
|
8
|
+
</head>
|
|
9
|
+
|
|
10
|
+
<body>
|
|
11
|
+
<my-ui-box></my-ui-box>
|
|
12
|
+
<script>
|
|
13
|
+
class MyIsolatedComponent extends HTMLElement {
|
|
14
|
+
constructor() {
|
|
15
|
+
super();
|
|
16
|
+
const shadow = this.attachShadow({ mode: 'open' });
|
|
17
|
+
|
|
18
|
+
// Load external CSS
|
|
19
|
+
const style = document.createElement('style');
|
|
20
|
+
style.textContent = `
|
|
21
|
+
/* Example styles */
|
|
22
|
+
button {
|
|
23
|
+
background: red;
|
|
24
|
+
color: white;
|
|
25
|
+
padding: 1em;
|
|
26
|
+
}
|
|
27
|
+
`;
|
|
28
|
+
|
|
29
|
+
// Add HTML
|
|
30
|
+
const wrapper = document.createElement('div');
|
|
31
|
+
wrapper.innerHTML = `<button>Hello from shadow!</button>`;
|
|
32
|
+
|
|
33
|
+
shadow.appendChild(style);
|
|
34
|
+
shadow.appendChild(wrapper);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
customElements.define('my-ui-box', MyIsolatedComponent);
|
|
38
|
+
|
|
39
|
+
</script>
|
|
40
|
+
</body>
|
|
41
|
+
|
|
42
|
+
</html>
|
|
@@ -36,8 +36,8 @@ const units = {
|
|
|
36
36
|
fToVf: { 125: 0, 250: 2, 500: 4, 750: 5.2, 1000: 6, 1500: 7.2, 2000: 8, 3000: 9.2, 4000: 10, 6000: 11.2, 8000: 12, 12000: 13.2, 16000: 14 },
|
|
37
37
|
intensity: { min: -20, max: 130, step: 10 },
|
|
38
38
|
styles: {
|
|
39
|
-
frequency: ['text-anchor: middle', 'dominant-baseline: hanging', 'font: 2px
|
|
40
|
-
intensity: ['text-anchor: end', 'dominant-baseline: middle', 'font: 2px
|
|
39
|
+
frequency: ['text-anchor: middle', 'dominant-baseline: hanging', 'font: 2px Vazirmatn', 'user-select: none', 'font-weight:bold'].join('; '),
|
|
40
|
+
intensity: ['text-anchor: end', 'dominant-baseline: middle', 'font: 2px Vazirmatn', 'user-select: none', 'font-weight:bold'].join('; '),
|
|
41
41
|
mainFreqline: ['stroke: black', 'stroke-width: 0.1'].join('; '),
|
|
42
42
|
semiOctavFreqline: ['stroke: black', 'stroke-width: 0.1', 'stroke-dasharray: 0.5'].join('; '),
|
|
43
43
|
line: 'stroke: black; stroke-width: 0.1;',
|
package/src/Form/Form.js
CHANGED
|
@@ -84,8 +84,6 @@ export default class Form {
|
|
|
84
84
|
if (sections['Reflex Titles']) {
|
|
85
85
|
dims = template['Reflex Titles'];
|
|
86
86
|
const titles = new MultiText({ container: sections['Reflex Titles'], dims });
|
|
87
|
-
console.log(dims);
|
|
88
|
-
|
|
89
87
|
}
|
|
90
88
|
if (sections.RReflex) {
|
|
91
89
|
dims = template.RReflex
|
|
@@ -134,11 +132,30 @@ export default class Form {
|
|
|
134
132
|
return svg
|
|
135
133
|
}
|
|
136
134
|
|
|
137
|
-
update({ officeData, patientData, sessionIndex
|
|
135
|
+
update({ officeData, patientData, sessionIndex }) {
|
|
136
|
+
// جداکردن دیتای مربوط به سکشن های مختلف
|
|
137
|
+
const currentPatientData = patientData.sessions[sessionIndex]
|
|
138
|
+
const data = {
|
|
139
|
+
audiogram: currentPatientData.audiogram,
|
|
140
|
+
speech: currentPatientData.speech,
|
|
141
|
+
tympanogram: currentPatientData.tympanogram,
|
|
142
|
+
reflex: currentPatientData.reflex,
|
|
143
|
+
|
|
144
|
+
}
|
|
145
|
+
this.patient?.update(patientData)
|
|
146
|
+
data?.audiogram?.R && this.RAudiogram?.update({ data: data.audiogram.R, side: 'R' })
|
|
147
|
+
data?.audiogram?.L && this.LAudiogram?.update({ data: data.audiogram.L, side: 'L' })
|
|
148
|
+
data?.speech?.R && this.RSpeech?.update(data?.speech?.R)
|
|
149
|
+
data?.speech?.L && this.LSpeech?.update(data?.speech?.L)
|
|
150
|
+
data?.tympanogram?.R && this.RTympanogram?.update(data.tympanogram?.R)
|
|
151
|
+
data?.tympanogram?.L && this.LTympanogram?.update(data.tympanogram?.L)
|
|
152
|
+
data?.reflex?.R && this.RReflex?.update(data?.reflex?.R)
|
|
153
|
+
data?.reflex?.L && this.LReflex?.update(data?.reflex?.L)
|
|
154
|
+
/*
|
|
138
155
|
|
|
139
156
|
const session = patientData.sessions[sessionIndex]
|
|
140
157
|
|
|
141
|
-
let
|
|
158
|
+
let objData = {
|
|
142
159
|
header: {
|
|
143
160
|
officeName: officeData.name,
|
|
144
161
|
officeLogo: officeData.logos[officeData.selectedLogoIndex],
|
|
@@ -163,15 +180,15 @@ export default class Form {
|
|
|
163
180
|
|
|
164
181
|
// let keys = Object.keys(data)
|
|
165
182
|
// if (keys.includes("header")) {
|
|
166
|
-
if (
|
|
167
|
-
this.header?.update(
|
|
168
|
-
this.data.header =
|
|
183
|
+
if (objData.header) {
|
|
184
|
+
this.header?.update(objData.header)
|
|
185
|
+
this.data.header = objData.header
|
|
169
186
|
}
|
|
170
187
|
// }
|
|
171
188
|
// if (keys.includes("patient")) {
|
|
172
|
-
if (
|
|
173
|
-
this.patient?.update(
|
|
174
|
-
this.data.patient =
|
|
189
|
+
if (objData.patient) {
|
|
190
|
+
this.patient?.update(objData.patient)
|
|
191
|
+
this.data.patient = objData.patient
|
|
175
192
|
}
|
|
176
193
|
// }
|
|
177
194
|
// if (keys.includes("history")) {
|
|
@@ -231,6 +248,8 @@ export default class Form {
|
|
|
231
248
|
this.footer?.update(data?.footer)
|
|
232
249
|
this.data.footer = data.footer
|
|
233
250
|
}
|
|
251
|
+
|
|
252
|
+
*/
|
|
234
253
|
}
|
|
235
254
|
|
|
236
255
|
// خطوط نقطه چین مارجین فرم
|
package/src/Forms/Forms.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// import '
|
|
1
|
+
// import '../../styles.css' // برای تست منتقل شد به فایل ایندکس اصلی اچتیامال و برای توسعه منتقل شده به ایندکس جی اس
|
|
2
2
|
import printForm from "./printForm.js"
|
|
3
3
|
import Form from "../Form/Form.js"
|
|
4
4
|
import putGrid from "../common/putGrid.js"
|
|
@@ -12,8 +12,9 @@ import templAudiometry from "../../assets/templates/templAudiometry.js"
|
|
|
12
12
|
export default class Forms {
|
|
13
13
|
constructor({ assets, container, templates, defaultTemplateIndex = 0, mode = 'production' } = {}) {
|
|
14
14
|
// console.log('I`M FROM Forms.constructor METHOD !!!!!!!!!!!!!!');
|
|
15
|
-
|
|
15
|
+
|
|
16
16
|
this.container = container
|
|
17
|
+
this.data = {}
|
|
17
18
|
this.mode = mode;
|
|
18
19
|
this.forms = [] // آرایه آبجکت های فرم های مختلف
|
|
19
20
|
this.addForms({ templates, defaultTemplateIndex })
|
|
@@ -68,7 +69,7 @@ export default class Forms {
|
|
|
68
69
|
// this.selectedForm = forms[index]
|
|
69
70
|
selectedIndex = index
|
|
70
71
|
this.selectedIndex = selectedIndex
|
|
71
|
-
this.update(this.
|
|
72
|
+
this.update({ data: this.data }) // با مقادیر قبلی آپدیت را انجام بده
|
|
72
73
|
})
|
|
73
74
|
}) // سمیکالن واجب
|
|
74
75
|
|
|
@@ -109,16 +110,35 @@ export default class Forms {
|
|
|
109
110
|
}
|
|
110
111
|
|
|
111
112
|
// این تابع یک بار از بیرون کلاس فراخوانی میشه و یک بار وقتی از داخل تمپلت فرم را عوض میکنیم
|
|
112
|
-
update({ officeData, patientData, sessionIndex =
|
|
113
|
-
|
|
113
|
+
update({ data, officeData, patientData, sessionIndex } = {}) {
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
// پارامتر اول برای آپدیت داخلی استفاده میشود
|
|
117
|
+
if (data) {
|
|
118
|
+
|
|
119
|
+
officeData = this.data.officeData
|
|
120
|
+
patientData = this.data.patientData
|
|
121
|
+
sessionIndex = this.data.sessionIndex
|
|
122
|
+
}
|
|
123
|
+
// console.log(patientData);
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
this.forms[this.selectedIndex].update({ officeData, patientData, sessionIndex })
|
|
127
|
+
|
|
128
|
+
this.data.officeData = officeData
|
|
129
|
+
this.data.patientData = patientData
|
|
130
|
+
this.data.sessionIndex = sessionIndex
|
|
114
131
|
|
|
132
|
+
// console.log('I`M FROM Forms.update METHOD !!!!!!!!!!!!!!');
|
|
133
|
+
//
|
|
115
134
|
// اگر هر دو دیتا وجود داشت ادامه بده
|
|
116
|
-
if (officeData && patientData) {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
135
|
+
// if (officeData && patientData) {
|
|
136
|
+
// // ذخیره کل دیتا برای استفاده داخلی آپدیت فرم انتخاب شده
|
|
137
|
+
// this.dataParams = { officeData, patientData, sessionIndex }
|
|
138
|
+
// // this.selectedForm.update({ officeData, patientData, sessionIndex })
|
|
139
|
+
// this.forms[this.selectedIndex].update(this.dataParams)
|
|
140
|
+
// }
|
|
141
|
+
|
|
122
142
|
}
|
|
123
143
|
|
|
124
144
|
// توابع داخلی ایجاد دکمه و لینک های بالای فرم
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { officeData, patientData } from "../../assets/data/sampleData";
|
|
2
|
+
import templAudiometry from "../../assets/templates/templAudiometry";
|
|
3
|
+
import templCombo from "../../assets/templates/templCombo";
|
|
4
|
+
import Forms from "./Forms";
|
|
5
|
+
|
|
6
|
+
class formsUI {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.data = {}
|
|
9
|
+
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
draw({ containerId = '#app' }) {
|
|
13
|
+
document.querySelector(containerId).insertAdjacentHTML('beforeend', `
|
|
14
|
+
<div id="forms"></div>
|
|
15
|
+
`);
|
|
16
|
+
|
|
17
|
+
const container = document.getElementById('forms')
|
|
18
|
+
this.forms = new Forms({ container, templates: [templCombo, templAudiometry], mode: 'develop' });
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
update({ officeData, patientData, sessionIndex }) {
|
|
22
|
+
officeData && (this.officeData = officeData);
|
|
23
|
+
patientData && (this.patientData = patientData);
|
|
24
|
+
this.currentSessionPatientData = patientData.sessions[sessionIndex]
|
|
25
|
+
this.forms.update({ officeData, patientData, sessionIndex })
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export default new formsUI()
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
package/src/Header/Header.js
CHANGED
|
@@ -19,7 +19,7 @@ export default class Header {
|
|
|
19
19
|
let x = dims.margin.left;
|
|
20
20
|
let y = dims.margin.top;
|
|
21
21
|
|
|
22
|
-
const svg = putSVG({ x, y, width, height, style: 'font-family:
|
|
22
|
+
const svg = putSVG({ x, y, width, height, style: 'font-family: Vazirmatn; direction: rtl !important; user-select: none;' })
|
|
23
23
|
|
|
24
24
|
// Logo
|
|
25
25
|
let image = document.createElementNS(svgNS, "image");
|
package/src/Header/Header_box.js
CHANGED