w-data-collector 1.0.1

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 (60) hide show
  1. package/.editorconfig +9 -0
  2. package/.eslintignore +3 -0
  3. package/.eslintrc.js +54 -0
  4. package/.jsdoc +25 -0
  5. package/LICENSE +21 -0
  6. package/README.md +43 -0
  7. package/SECURITY.md +5 -0
  8. package/babel.config.js +14 -0
  9. package/dist/w-data-collector.umd.js +7 -0
  10. package/dist/w-data-collector.umd.js.map +1 -0
  11. package/docs/fonts/Montserrat/Montserrat-Bold.eot +0 -0
  12. package/docs/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
  13. package/docs/fonts/Montserrat/Montserrat-Bold.woff +0 -0
  14. package/docs/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
  15. package/docs/fonts/Montserrat/Montserrat-Regular.eot +0 -0
  16. package/docs/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
  17. package/docs/fonts/Montserrat/Montserrat-Regular.woff +0 -0
  18. package/docs/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
  19. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
  20. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +978 -0
  21. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
  22. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
  23. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
  24. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
  25. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +1049 -0
  26. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
  27. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
  28. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
  29. package/docs/genIndex.mjs.html +189 -0
  30. package/docs/genTestdata.mjs.html +162 -0
  31. package/docs/global.html +891 -0
  32. package/docs/index.html +81 -0
  33. package/docs/scripts/collapse.js +20 -0
  34. package/docs/scripts/linenumber.js +25 -0
  35. package/docs/scripts/nav.js +12 -0
  36. package/docs/scripts/polyfill.js +4 -0
  37. package/docs/scripts/prettify/Apache-License-2.0.txt +202 -0
  38. package/docs/scripts/prettify/lang-css.js +2 -0
  39. package/docs/scripts/prettify/prettify.js +28 -0
  40. package/docs/scripts/search.js +83 -0
  41. package/docs/styles/jsdoc.css +765 -0
  42. package/docs/styles/prettify.css +79 -0
  43. package/gi.mjs +13 -0
  44. package/gt.mjs +11 -0
  45. package/package.json +32 -0
  46. package/src/WDataCollector.mjs +13 -0
  47. package/src/build.mjs +127 -0
  48. package/src/genIndex.mjs +120 -0
  49. package/src/genTestdata.mjs +93 -0
  50. package/test/genIndex.test.mjs +17 -0
  51. package/test/schema/index.mjs +20 -0
  52. package/test/schema/index.mjs.txt +20 -0
  53. package/test/schema/tables/holeLabTabs.mjs +130 -0
  54. package/test/schema/tables/holeLabTabsItems.mjs +318 -0
  55. package/test/schema/tables/users.mjs +102 -0
  56. package/toolg/addVersion.mjs +4 -0
  57. package/toolg/cleanFolder.mjs +4 -0
  58. package/toolg/gDistRollup.mjs +35 -0
  59. package/toolg/gDocsExams.mjs +51 -0
  60. package/toolg/modifyReadme.mjs +4 -0
@@ -0,0 +1,79 @@
1
+ .pln {
2
+ color: #ddd;
3
+ }
4
+
5
+ /* string content */
6
+ .str {
7
+ color: #61ce3c;
8
+ }
9
+
10
+ /* a keyword */
11
+ .kwd {
12
+ color: #fbde2d;
13
+ }
14
+
15
+ /* a comment */
16
+ .com {
17
+ color: #aeaeae;
18
+ }
19
+
20
+ /* a type name */
21
+ .typ {
22
+ color: #8da6ce;
23
+ }
24
+
25
+ /* a literal value */
26
+ .lit {
27
+ color: #fbde2d;
28
+ }
29
+
30
+ /* punctuation */
31
+ .pun {
32
+ color: #ddd;
33
+ }
34
+
35
+ /* lisp open bracket */
36
+ .opn {
37
+ color: #000000;
38
+ }
39
+
40
+ /* lisp close bracket */
41
+ .clo {
42
+ color: #000000;
43
+ }
44
+
45
+ /* a markup tag name */
46
+ .tag {
47
+ color: #8da6ce;
48
+ }
49
+
50
+ /* a markup attribute name */
51
+ .atn {
52
+ color: #fbde2d;
53
+ }
54
+
55
+ /* a markup attribute value */
56
+ .atv {
57
+ color: #ddd;
58
+ }
59
+
60
+ /* a declaration */
61
+ .dec {
62
+ color: #EF5050;
63
+ }
64
+
65
+ /* a variable name */
66
+ .var {
67
+ color: #c82829;
68
+ }
69
+
70
+ /* a function name */
71
+ .fun {
72
+ color: #4271ae;
73
+ }
74
+
75
+ /* Specify class=linenums on a pre to get line numbering */
76
+ ol.linenums {
77
+ margin-top: 0;
78
+ margin-bottom: 0;
79
+ }
package/gi.mjs ADDED
@@ -0,0 +1,13 @@
1
+ // import genIndex from 'w-data-collector/src/genIndex.mjs'
2
+ import genIndex from './src/genIndex.mjs'
3
+
4
+
5
+ // genIndex('./src/schema/tables', './src/schema')
6
+ genIndex('./test/schema/tables', './test/schema', { fpBuild: './src/build.mjs' })
7
+
8
+
9
+ //將gi.mjs放置於./src/schema/gi.mjs時使用指令:
10
+ //node --experimental-modules --es-module-specifier-resolution=node ./src/schema/gi.mjs
11
+
12
+ //node --experimental-modules --es-module-specifier-resolution=node gi.mjs
13
+
package/gt.mjs ADDED
@@ -0,0 +1,11 @@
1
+ import genTestdata from 'w-data-collector/src/genTestdata.mjs'
2
+ import ds from './index.mjs'
3
+ import { woItems } from '../../server/mOrm.mjs'
4
+
5
+
6
+ genTestdata(ds, woItems)
7
+
8
+
9
+ //將gt.mjs放置於./src/schema/gt.mjs時使用指令:
10
+ //node --experimental-modules --es-module-specifier-resolution=node ./src/schema/gt.mjs
11
+
package/package.json ADDED
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "w-data-collector",
3
+ "version": "1.0.1",
4
+ "description": "A data of collector.",
5
+ "main": "dist/w-data-collector.umd.js",
6
+ "dependencies": {
7
+ "lodash": "^4.17.21",
8
+ "wsemi": "^1.6.19"
9
+ },
10
+ "devDependencies": {
11
+ "w-package-tools": "^1.0.59"
12
+ },
13
+ "scripts": {
14
+ "test": "mocha --parallel --timeout 60000 --experimental-modules --es-module-specifier-resolution=node",
15
+ "deploy": "gh-pages -d docs"
16
+ },
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/yuda-lyu/w-data-collector.git"
20
+ },
21
+ "keywords": [
22
+ "package",
23
+ "tool",
24
+ "collector"
25
+ ],
26
+ "author": "yuda-lyu(semisphere)",
27
+ "license": "MIT",
28
+ "bugs": {
29
+ "url": "https://github.com/yuda-lyu/w-data-collector/issues"
30
+ },
31
+ "homepage": "https://github.com/yuda-lyu/w-data-collector#readme"
32
+ }
@@ -0,0 +1,13 @@
1
+ import build from './build.mjs'
2
+ import genIndex from './genIndex.mjs'
3
+ import genTestdata from './genTestdata.mjs'
4
+
5
+
6
+ let WDataCollector = {
7
+ build,
8
+ genIndex,
9
+ genTestdata,
10
+ }
11
+
12
+
13
+ export default WDataCollector
package/src/build.mjs ADDED
@@ -0,0 +1,127 @@
1
+ import each from 'lodash/each'
2
+ import keys from 'lodash/keys'
3
+ import get from 'lodash/get'
4
+ import size from 'lodash/size'
5
+ import haskey from 'wsemi/src/haskey.mjs'
6
+ import isestr from 'wsemi/src/isestr.mjs'
7
+ import iseobj from 'wsemi/src/iseobj.mjs'
8
+ import isfun from 'wsemi/src/isfun.mjs'
9
+ import isbol from 'wsemi/src/isbol.mjs'
10
+
11
+
12
+ function build(params, opt = {}) {
13
+
14
+ //useCreateStorage
15
+ let useCreateStorage = get(opt, 'useCreateStorage')
16
+ if (!isbol(useCreateStorage)) {
17
+ useCreateStorage = false
18
+ }
19
+
20
+ //params
21
+ let { keyTable, tableNameCht, tableNameEng, settings, parser, fnew, ftest } = params
22
+
23
+ //check keyTable
24
+ if (!isestr(keyTable)) {
25
+ throw new Error(`invalid keyTable[${keyTable}]`)
26
+ }
27
+
28
+ //check tableNameCht
29
+ if (!isestr(tableNameCht)) {
30
+ tableNameCht = keyTable
31
+ }
32
+
33
+ //check tableNameEng
34
+ if (!isestr(tableNameEng)) {
35
+ tableNameEng = keyTable
36
+ }
37
+
38
+ //check settings
39
+ if (!iseobj(settings)) {
40
+ throw new Error('invalid settings')
41
+ }
42
+
43
+ //check parser
44
+ if (!isfun(parser)) {
45
+ parser = null
46
+ }
47
+
48
+ //check fnew
49
+ if (!isfun(fnew)) {
50
+ fnew = null
51
+ }
52
+
53
+ //check ftest
54
+ let _ftest = null
55
+ if (isfun(ftest)) {
56
+ _ftest = async(wo) => {
57
+
58
+ //check
59
+ if (!iseobj(wo)) {
60
+ throw new Error('invalid wo')
61
+ }
62
+
63
+ //check
64
+ if (!haskey(wo, keyTable)) {
65
+ console.log(wo)
66
+ throw new Error(`keyTable[${keyTable}] is not in wo`)
67
+ }
68
+
69
+ //r
70
+ let r = []
71
+ try {
72
+ r = ftest()
73
+ }
74
+ catch (err) {
75
+ console.log(`keyTable[${keyTable}] ftest catch`, err)
76
+ throw new Error(err)
77
+ }
78
+
79
+ //check
80
+ if (size(r) === 0) {
81
+ return
82
+ }
83
+
84
+ //createStorage
85
+ if (useCreateStorage) {
86
+ await wo[keyTable].createStorage()
87
+ }
88
+
89
+ //save
90
+ await wo[keyTable].save(r)
91
+
92
+ }
93
+ }
94
+
95
+ //kpHead, kpType
96
+ let kpHead = {}
97
+ let kpType = {}
98
+ each(keys(settings), (v) => {
99
+ let name = get(settings, `${v}.name`, '')
100
+ if (isestr(name)) {
101
+ kpHead[v] = name
102
+ }
103
+ let type = get(settings, `${v}.type`, '')
104
+ if (isestr(type)) {
105
+ kpType[v] = type
106
+ }
107
+ })
108
+
109
+ //r
110
+ let r = {
111
+ keyTable,
112
+ tableNameCht,
113
+ tableNameEng,
114
+ settings,
115
+ keys: keys(settings),
116
+ kpType,
117
+ kpHead,
118
+ parser,
119
+ fnew,
120
+ ftest: _ftest,
121
+ }
122
+
123
+ return r
124
+ }
125
+
126
+
127
+ export default build
@@ -0,0 +1,120 @@
1
+ import path from 'path'
2
+ import fs from 'fs'
3
+ import get from 'lodash/get'
4
+ import map from 'lodash/map'
5
+ import join from 'lodash/join'
6
+ import isestr from 'wsemi/src/isestr.mjs'
7
+ import fsTreeFolder from 'wsemi/src/fsTreeFolder.mjs'
8
+ import replace from 'wsemi/src/replace.mjs'
9
+
10
+
11
+ function genImports(ms) {
12
+ let rs = map(ms, (v) => {
13
+ let t = `import {name} from '{src}'`
14
+ t = replace(t, '{name}', v.name)
15
+ t = replace(t, '{src}', v.src)
16
+ return t
17
+ })
18
+ return join(rs, '\n')
19
+ }
20
+
21
+
22
+ function genNames(ms) {
23
+ let rs = map(ms, (v) => {
24
+ let t = ` {name},`
25
+ t = replace(t, '{name}', v.name)
26
+ return t
27
+ })
28
+ return join(rs, '\n')
29
+ }
30
+
31
+
32
+ /**
33
+ * 由各資料表定義*.mjs檔產生資料表收集物件ds
34
+ *
35
+ * @param {String} fdSrc 輸入各資料表定義*.mjs檔案所在資料夾
36
+ * @param {String} fdIndex 輸入產生index.mjs檔案需儲存至的資料夾,主要是跟各資料表定義*.mjs檔計算相對路徑供程式碼import用
37
+ * @param {Object} [opt={}] 輸入設定物件,預設{}
38
+ * @param {String} [opt.fpBuild='w-data-collector/src/build.mjs'] 輸入程式碼所需import之再處理資料表定義*.mjs檔的build函數,預設為'w-data-collector/src/build.mjs'
39
+ * @param {String} [opt.fnIndex='index.mjs'] 輸入產生ds所需程式碼index.mjs檔案的名稱,預設為'index.mjs',實際檔案儲存位置為fdIndex下fnIndex
40
+ * @example
41
+ *
42
+ * import genIndex from 'w-data-collector/src/genIndex.mjs'
43
+ *
44
+ * genIndex('./src/schema/tables', './src/schema', {})
45
+ * // => genIndex done
46
+ *
47
+ */
48
+ function genIndex(fdSrc, fdIndex, opt = {}) {
49
+
50
+ //fpBuild
51
+ let fpBuild = get(opt, 'fpBuild')
52
+ if (!isestr(fpBuild)) {
53
+ fpBuild = 'w-data-collector/src/build.mjs'
54
+ }
55
+
56
+ //fnIndex
57
+ let fnIndex = get(opt, 'fnIndex')
58
+ if (!isestr(fnIndex)) {
59
+ fnIndex = 'index.mjs'
60
+ }
61
+
62
+ //fsTreeFolder
63
+ let fps = fsTreeFolder(fdSrc)
64
+ // console.log('fps', fps)
65
+
66
+ //ms
67
+ let ms = map(fps, (v) => {
68
+ let name = v.name
69
+ name = replace(name, '.mjs', '')
70
+ name = replace(name, '.js', '')
71
+ let src = path.relative(fdIndex, v.path)
72
+ src = src.replace(/\\/g, '/')
73
+ src = `./${src}`
74
+ return {
75
+ name,
76
+ src,
77
+ }
78
+ })
79
+ // console.log('ms', ms)
80
+
81
+ let t = `{cimps}
82
+ import build from '{fpBuild}'
83
+
84
+
85
+ let cs = {
86
+ {cnms}
87
+ }
88
+
89
+ //ds
90
+ let ds = {}
91
+ for (let k in cs) {
92
+ ds[k] = build(cs[k])
93
+ }
94
+
95
+
96
+ export default ds
97
+ `
98
+
99
+ //genImports
100
+ let cimps = genImports(ms)
101
+
102
+ //genNames
103
+ let cnms = genNames(ms)
104
+
105
+ //replace
106
+ t = replace(t, '{cimps}', cimps)
107
+ t = replace(t, '{cnms}', cnms)
108
+ t = replace(t, '{fpBuild}', fpBuild)
109
+
110
+ //fpIndex
111
+ let fpIndex = path.resolve(fdIndex, fnIndex)
112
+
113
+ //writeFileSync
114
+ fs.writeFileSync(fpIndex, t, 'utf8')
115
+
116
+ console.log('genIndex done')
117
+ }
118
+
119
+
120
+ export default genIndex
@@ -0,0 +1,93 @@
1
+ import path from 'path'
2
+ import keys from 'lodash/keys'
3
+ import each from 'lodash/each'
4
+ import get from 'lodash/get'
5
+ import isestr from 'wsemi/src/isestr.mjs'
6
+ import isfun from 'wsemi/src/isfun.mjs'
7
+ import isbol from 'wsemi/src/isbol.mjs'
8
+ import pmSeries from 'wsemi/src/pmSeries.mjs'
9
+
10
+
11
+ function genModels(ds, opt = {}) {
12
+
13
+ //fdModels
14
+ let fdModels = get(opt, 'fdModels')
15
+ if (!isestr(fdModels)) {
16
+ let fdSrv = path.resolve()
17
+ fdModels = `${fdSrv}/models`
18
+ }
19
+
20
+ //genModelsByTabs
21
+ let genModelsByTabs = get(opt, 'genModelsByTabs')
22
+ if (!isfun(genModelsByTabs)) {
23
+ throw new Error(`opt.genModelsByTabs is not a function, it needs to import from 'w-orm-reladb/src/genModelsByTabs.mjs'`)
24
+ }
25
+
26
+ //tabs
27
+ let tabs = {}
28
+ each(ds, (v, k) => {
29
+ tabs[k] = v.settings
30
+ })
31
+ // console.log('tabs', tabs)
32
+
33
+ //genModelsByTabs
34
+ genModelsByTabs(fdModels, tabs)
35
+
36
+ }
37
+
38
+
39
+ /**
40
+ * 由資料表收集物件ds與資料表控制物件wo產生測試資料,並儲存至資料庫
41
+ *
42
+ * @param {Object} ds 輸入資料表收集物件,ds也就是import由genIndex產生的index.mjs,其內各key代表各資料表,值代表各資料表設定與操作函數例如settings、fnew或ftest等
43
+ * @param {Object} wo 輸入資料表控制物件,各key代表各資料表,值代表各資料表操作函數例如insert、save、del等
44
+ * @param {Object} [opt={}] 輸入設定物件,預設{}
45
+ * @param {Boolean} [opt.useGenModels=false] 輸入是否呼叫genModels,若資料庫與ORM為關聯資料庫時需設定為true,同時還需給予opt.genModelsByTabs。預設為false
46
+ * @param {Function} [opt.genModelsByTabs=null] 輸入可由ds與wo產生models的函數,若資料庫與ORM為關聯資料庫時則需給予,可由程式碼import genModelsByTabs from 'w-orm-reladb/src/genModelsByTabs.mjs'取得genModelsByTabs,並再設定給opt.genModelsByTabs
47
+ * @param {String} [opt.fdModels='./models'] 輸入產生models放置的資料夾位置,預設為工作路徑下的models
48
+ * @return {Promise} 回傳Promise,resolve代表產生成功,reject代表產生失敗
49
+ * @example
50
+ *
51
+ * import genTestdata from 'w-data-collector/src/genTestdata.mjs'
52
+ * import ds from './index.mjs'
53
+ * import { woItems } from '../../server/mOrm.mjs'
54
+ *
55
+ * genTestdata(ds, woItems, {})
56
+ * // => genTestdata done
57
+ *
58
+ */
59
+ async function genTestdata(ds, wo, opt = {}) {
60
+
61
+ //useGenModels
62
+ let useGenModels = get(opt, 'useGenModels')
63
+ if (!isbol(useGenModels)) {
64
+ useGenModels = false
65
+ }
66
+
67
+ //genModels
68
+ if (useGenModels) {
69
+ genModels(ds, opt)
70
+ console.log('genModels done')
71
+ }
72
+
73
+ //ks
74
+ let ks = keys(ds)
75
+
76
+ //ftest
77
+ await pmSeries(ks, async (k) => {
78
+
79
+ //ftest
80
+ let ftest = get(ds, `${k}.ftest`)
81
+
82
+ //check
83
+ if (isfun(ftest)) {
84
+ await ds[k].ftest(wo)
85
+ }
86
+
87
+ })
88
+
89
+ console.log('genTestdata done', ks)
90
+ }
91
+
92
+
93
+ export default genTestdata
@@ -0,0 +1,17 @@
1
+ import fs from 'fs'
2
+ import _ from 'lodash'
3
+ import assert from 'assert'
4
+ import genIndex from '../src/genIndex.mjs'
5
+
6
+ describe(`genIndex`, function() {
7
+
8
+ it(`should be equal to index.mjs.txt when input './test/schema/tables', './test/schema', { fpBuild: './src/build.mjs' }`, function() {
9
+ genIndex('./test/schema/tables', './test/schema', { fpBuild: './src/build.mjs' })
10
+ let r = fs.readFileSync('./test/schema/index.mjs', 'utf8')
11
+ r = _.trim(r)
12
+ let rr = fs.readFileSync('./test/schema/index.mjs.txt', 'utf8')
13
+ rr = _.trim(rr)
14
+ assert.strict.deepStrictEqual(r, rr)
15
+ })
16
+
17
+ })
@@ -0,0 +1,20 @@
1
+ import holeLabTabs from './tables/holeLabTabs.mjs'
2
+ import holeLabTabsItems from './tables/holeLabTabsItems.mjs'
3
+ import users from './tables/users.mjs'
4
+ import build from './src/build.mjs'
5
+
6
+
7
+ let cs = {
8
+ holeLabTabs,
9
+ holeLabTabsItems,
10
+ users,
11
+ }
12
+
13
+ //ds
14
+ let ds = {}
15
+ for (let k in cs) {
16
+ ds[k] = build(cs[k])
17
+ }
18
+
19
+
20
+ export default ds
@@ -0,0 +1,20 @@
1
+ import holeLabTabs from './tables/holeLabTabs.mjs'
2
+ import holeLabTabsItems from './tables/holeLabTabsItems.mjs'
3
+ import users from './tables/users.mjs'
4
+ import build from './src/build.mjs'
5
+
6
+
7
+ let cs = {
8
+ holeLabTabs,
9
+ holeLabTabsItems,
10
+ users,
11
+ }
12
+
13
+ //ds
14
+ let ds = {}
15
+ for (let k in cs) {
16
+ ds[k] = build(cs[k])
17
+ }
18
+
19
+
20
+ export default ds
@@ -0,0 +1,130 @@
1
+ import map from 'lodash/map'
2
+ import keys from 'lodash/keys'
3
+ import get from 'lodash/get'
4
+ import genID from 'wsemi/src/genID.mjs'
5
+ import dtmapping from 'wsemi/src/dtmapping.mjs'
6
+ import now2str from 'wsemi/src/now2str.mjs'
7
+
8
+
9
+ let keyTable = 'holeLabTabs'
10
+ let tableNameCht = '鑽孔室內試驗表資料'
11
+ let tableNameEng = 'Lab table'
12
+
13
+ let settings = {
14
+ 'id': {
15
+ pk: true,
16
+ name: '主鍵',
17
+ type: 'STRING',
18
+ },
19
+ 'name': {
20
+ name: '名稱',
21
+ type: 'STRING',
22
+ },
23
+ 'description': {
24
+ name: '說明',
25
+ type: 'TEXT',
26
+ },
27
+
28
+ 'proj_no': {
29
+ name: '計畫編號',
30
+ type: 'STRING',
31
+ dig: null
32
+ },
33
+ 'proj_name': {
34
+ name: '計畫名稱',
35
+ type: 'STRING',
36
+ dig: null
37
+ },
38
+ 'hole_no': {
39
+ name: '孔號',
40
+ type: 'STRING',
41
+ dig: null
42
+ },
43
+ 'hole_depth': {
44
+ name: '孔深(m)',
45
+ type: 'STRING',
46
+ dig: null
47
+ },
48
+ 'regular': { //值: mdb, public
49
+ name: '佈告類型',
50
+ type: 'STRING',
51
+ dig: null
52
+ },
53
+ 'longitude': {
54
+ name: '經度',
55
+ type: 'STRING',
56
+ dig: null
57
+ },
58
+ 'latitude': {
59
+ name: '緯度',
60
+ type: 'STRING',
61
+ dig: null
62
+ },
63
+ 'elevation': {
64
+ name: '孔位高程(m)',
65
+ type: 'STRING',
66
+ dig: null
67
+ },
68
+ 'wt_depth': {
69
+ name: '地下水位(m)',
70
+ type: 'STRING',
71
+ dig: null
72
+ },
73
+
74
+ 'userId': {
75
+ name: '創建使用者主鍵',
76
+ type: 'STRING',
77
+ },
78
+ 'timeCreate': {
79
+ name: '創建時間',
80
+ type: 'STRING',
81
+ },
82
+ 'userIdUpdate': {
83
+ name: '最新變更使用者主鍵',
84
+ type: 'STRING',
85
+ },
86
+ 'timeUpdate': {
87
+ name: '更新時間',
88
+ type: 'STRING',
89
+ },
90
+ 'isActive': {
91
+ name: '是否有效',
92
+ type: 'STRING',
93
+ },
94
+ }
95
+
96
+ let fnew = (ndata = {}) => {
97
+ let o = dtmapping(ndata, keys(settings))
98
+ o.id = genID()
99
+ o.userIdUpdate = get(o, 'userId', '')
100
+ o.timeCreate = now2str()
101
+ o.timeUpdate = o.timeCreate
102
+ o.isActive = 'y'
103
+ return o
104
+ }
105
+
106
+ let ftest = () => {
107
+ let r = map([
108
+ ['BH-1'],
109
+ ['BH-2'],
110
+ ], ([name]) => {
111
+ let o = fnew({ userId: 'id-for-admin' }, settings)
112
+ o.id = `id-for-${name}`
113
+ o.description = `${name} 描述`
114
+ return o
115
+ })
116
+ console.log(`${holeLabTabs.keyTable} data`, r)
117
+ return r
118
+ }
119
+
120
+ let holeLabTabs = {
121
+ keyTable,
122
+ tableNameCht,
123
+ tableNameEng,
124
+ settings,
125
+ fnew,
126
+ ftest,
127
+ }
128
+
129
+
130
+ export default holeLabTabs