vue2-client 1.14.60 → 1.14.62

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vue2-client",
3
- "version": "1.14.60",
3
+ "version": "1.14.62",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "serve": "SET NODE_OPTIONS=--openssl-legacy-provider && vue-cli-service serve --no-eslint",
@@ -314,17 +314,13 @@ export default {
314
314
  let result
315
315
  if (this.searchResultType !== 'Default') {
316
316
  if (this.searchResultType === 'Array') {
317
- // 如果是坐标搜索,只返回坐标
318
- if (this.attr.type === 'coordinateSearch') {
319
- result = [this.addressObj.lng_lat]
320
- } else {
321
- result = [_addstr || this.addressObj.address, this.addressObj.lng_lat]
322
- }
317
+ result = [_addstr || this.addressObj.address, this.addressObj.lng_lat]
323
318
  } else {
324
319
  result = {}
325
320
  // 如果是坐标搜索,只返回坐标
321
+ // 不知道为什么这么加 命名之前的组件已经返回了 lng_lat ,算了 还是相信后人的智慧吧
326
322
  if (this.attr.type === 'coordinateSearch') {
327
- result[this.resultKeys.coords] = this.addressObj.lng_lat
323
+ result[this.resultKeys.address] = this.addressObj.lng_lat
328
324
  } else {
329
325
  result[this.resultKeys.address] = _addstr || this.addressObj.address
330
326
  result[this.resultKeys.coords] = this.addressObj.lng_lat
@@ -1,3 +1,3 @@
1
- import AmapPointRendering from './AmapPointRendering'
2
-
3
- export default AmapPointRendering
1
+ import AmapPointRendering from './AmapPointRendering'
2
+
3
+ export default AmapPointRendering
@@ -6,13 +6,10 @@ export default {
6
6
  name: 'Demo',
7
7
  components: { XAddNativeForm },
8
8
  mounted () {
9
- const realTableData = [{ tsc_f_contract_id: null, tsc_f_contract_code: '3316370809565024955', tsc_f_createfile_date: '2025-01-13 00:00:00', tsc_f_data: '王翔测试-15358338312: 繁荣南路滨河花园4楼号4单元19楼层1908门牌号' }]
10
- getConfigByNameAsync('ceshiCRUD', 'af-system').then(res => {
9
+ getConfigByNameAsync('form_check_test', 'af-system').then(res => {
11
10
  this.$refs.xAddFrom.init(Object.assign(res, {
12
11
  modifyModelData: {
13
- data: {
14
- oldSignList: realTableData
15
- }
12
+ data: {}
16
13
  }
17
14
  }))
18
15
  })
@@ -1,3 +1,3 @@
1
- import XDetailsView from './XDetailsView'
2
-
3
- export default XDetailsView
1
+ import XDetailsView from './XDetailsView'
2
+
3
+ export default XDetailsView
@@ -1,3 +1,3 @@
1
- import XFormGroupDetails from './XFormGroupDetails'
2
-
3
- export default XFormGroupDetails
1
+ import XFormGroupDetails from './XFormGroupDetails'
2
+
3
+ export default XFormGroupDetails
@@ -249,8 +249,6 @@ export default {
249
249
  },
250
250
  methods: {
251
251
  findComponentByName (instance, componentName, maxDepth, findType) {
252
- findType = findType || 'children'
253
- maxDepth = maxDepth || 50
254
252
  // 基础判断:如果实例不存在或者已经超过最大深度,返回null
255
253
  if (!instance || maxDepth <= 0) {
256
254
  return null
@@ -86,8 +86,7 @@
86
86
  </template>
87
87
 
88
88
  <script>
89
- import html2canvas from 'html2canvas'
90
- import jsPDF from 'jspdf'
89
+
91
90
  import { runLogic } from '@vue2-client/services/api/common'
92
91
  import { initDiagnosisDropdown } from './diagnosisAutocomplete'
93
92
 
@@ -388,136 +387,31 @@ export default {
388
387
  })
389
388
  }
390
389
  },
391
- // 修改 save 方法
392
- async save() {
390
+ // 保存文档
391
+ save () {
393
392
  // 验证必须输入项
394
393
  if (this.editorRef.validate()) {
395
- try {
396
- // 1. 先生成 PDF
397
- const pdfBlob = await this.generatePDF()
398
-
399
- // 2. 获取HTML文档和结构化数据(JSON)
400
- const data = {
401
- doc: this.editorRef.getHtml(),
402
- dataObject: this.editorRef.getBindObject(),
403
- dataMode: this.dataMode,
404
- resId: this.resId,
405
- modifyResModel: this.modifyResModel,
406
- logicExtraParams: this.logicExtraParams,
407
- // 添加 PDF 数据
408
- pdfData: pdfBlob
409
- }
410
-
411
- // 3. 保存到后端
412
- const res = await runLogic(this.saveDataLogicName, data, this.serviceName)
413
-
394
+ // 获取HTML文档和结构化数据(JSON)
395
+ const data = {
396
+ doc: this.editorRef.getHtml(),
397
+ dataObject: this.editorRef.getBindObject(),
398
+ dataMode: this.dataMode,
399
+ resId: this.resId,
400
+ modifyResModel: this.modifyResModel,
401
+ logicExtraParams: this.logicExtraParams
402
+ }
403
+ // 保存HTML文档和结构化数据到后端服务
404
+ runLogic(this.saveDataLogicName, data, this.serviceName).then(res => {
414
405
  this.$message.success('保存成功')
415
406
  this.changeRes(res.currResData.id)
416
407
  this.$emit('saveafter', data.dataObject)
417
- } catch (error) {
418
- console.error('保存失败:', error)
419
- this.$message.error('保存失败,请重试')
420
- } finally {
408
+ }).finally(() => {
421
409
  this.resDataModalVisible = false
422
- }
410
+ })
423
411
  } else {
424
412
  this.$message.error('请检查未填写的项目')
425
413
  }
426
414
  },
427
- // 修改 generatePDF 方法,返回 PDF Blob
428
- async generatePDF() {
429
- // 显示加载提示
430
- this.$message.loading('正在生成 PDF...', 0)
431
-
432
- try {
433
- const iframe = document.getElementById('x-editor')
434
- const iframeDocument = iframe.contentDocument || iframe.contentWindow.document
435
-
436
- // 添加自定义样式
437
- const style = iframeDocument.createElement('style')
438
- style.textContent = `
439
- body {
440
- font-family: Arial, sans-serif;
441
- line-height: 1.5;
442
- color: #333;
443
- padding: 20px;
444
- }
445
- h1, h2, h3 {
446
- color: #000;
447
- margin-bottom: 15px;
448
- }
449
- table {
450
- border-collapse: collapse;
451
- width: 100%;
452
- margin-bottom: 20px;
453
- }
454
- th, td {
455
- border: 1px solid #ddd;
456
- padding: 8px;
457
- text-align: left;
458
- }
459
- th {
460
- background-color: #f5f5f5;
461
- }
462
- img {
463
- max-width: 100%;
464
- height: auto;
465
- }
466
- `
467
- iframeDocument.head.appendChild(style)
468
-
469
- const canvas = await html2canvas(iframeDocument.body, {
470
- scale: 2,
471
- useCORS: true,
472
- logging: false,
473
- backgroundColor: '#ffffff',
474
- windowWidth: iframeDocument.documentElement.scrollWidth,
475
- windowHeight: iframeDocument.documentElement.scrollHeight
476
- })
477
-
478
- const pdf = new jsPDF({
479
- orientation: 'portrait',
480
- unit: 'mm',
481
- format: 'a4'
482
- })
483
-
484
- const imgData = canvas.toDataURL('image/png')
485
- const imgWidth = 210
486
- const imgHeight = (canvas.height * imgWidth) / canvas.width
487
-
488
- const pageHeight = 297
489
- let heightLeft = imgHeight
490
- let position = 0
491
-
492
- pdf.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight)
493
-
494
- while (heightLeft > 0) {
495
- position = heightLeft - pageHeight
496
- pdf.addPage()
497
- pdf.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight)
498
- heightLeft -= pageHeight
499
- }
500
-
501
- // 生成 PDF 的 Blob 数据
502
- const pdfBlob = pdf.output('blob')
503
-
504
- // 预览 PDF
505
- const pdfUrl = URL.createObjectURL(pdfBlob)
506
- window.open(pdfUrl, '_blank')
507
-
508
- // 关闭加载提示
509
- this.$message.destroy()
510
- this.$message.success('PDF 生成成功')
511
-
512
- // 返回 PDF Blob 数据
513
- return pdfBlob
514
- } catch (error) {
515
- console.error('PDF 生成失败:', error)
516
- this.$message.destroy()
517
- this.$message.error('PDF 生成失败,请重试')
518
- throw error // 抛出错误,让 save 方法捕获
519
- }
520
- },
521
415
  // 打印文档
522
416
  print () {
523
417
  this.editorRef.execCommand('print')
@@ -22,7 +22,7 @@ XTitle 是一个多功能的标题组件,可以显示标题文本或按钮,
22
22
 
23
23
  ### 配置参数格式
24
24
 
25
- XTitle 组件通过一个字符串参数进行配置
25
+ XTitle 组件通过一个字符串参数进行配置
26
26
 
27
27
  各部分说明:
28
28
 
@@ -37,9 +37,6 @@ XTitle 组件通过一个字符串参数进行配置
37
37
 
38
38
  ### 1. 基本标题
39
39
 
40
- ```vue
41
- <x-title query-params-name="患者信息"></x-title>
42
- ```
43
40
  ```vue
44
41
  <x-title query-params-name="患者信息-title"></x-title>
45
42
  ```
@@ -47,7 +44,7 @@ XTitle 组件通过一个字符串参数进行配置
47
44
  ### 2. 带下划线的标题
48
45
 
49
46
  ```vue
50
- <x-title query-params-name="患者信息-title-line"></x-title>
47
+ <x-title query-params-name="患者信息-title--line"></x-title>
51
48
  ```
52
49
 
53
50
  ### 3. 自定义下划线颜色和宽度
@@ -56,6 +53,12 @@ XTitle 组件通过一个字符串参数进行配置
56
53
  <x-title query-params-name="患者信息-title--line-red-800"></x-title>
57
54
  ```
58
55
 
56
+ ### 4. 带点击事件的标题
57
+
58
+ ```vue
59
+ <x-title query-params-name="患者信息-title-showPatient-line" @showPatient="handleShowPatient"></x-title>
60
+ ```
61
+
59
62
  ### 5. 按钮模式
60
63
 
61
64
  ```vue
@@ -4,14 +4,13 @@
4
4
  @updateImg="updateImg"
5
5
  ref="main"
6
6
  :use-oss-for-img="false"
7
- config-name="outpatientMedicationDispensingMainCover"
7
+ config-name="outpatientWait"
8
8
  server-name="af-his"
9
9
  :show-img-in-cell="true"
10
10
  :display-only="displayOnly"
11
11
  :edit-mode="false"
12
12
  :show-save-button="false"
13
13
  :dont-format="true"/>
14
- <button @click="clickButton()"></button>
15
14
  </div>
16
15
  </template>
17
16
 
@@ -68,9 +67,6 @@ export default {
68
67
  result.push(item.exportData())
69
68
  })
70
69
  console.warn('save', result)
71
- },
72
- clickButton () {
73
- this.findComponentByName(this, 'aaa', 10, 'parent')
74
70
  }
75
71
  }
76
72
  }
@@ -1,47 +1,90 @@
1
+ <template>
2
+ <a-card :bordered="false">
3
+ <x-form-table
4
+ title="示例页面"
5
+ :queryParamsName="queryParamsName"
6
+ :fixed-query-form="{
7
+ users_f_handler_id: currUser.id,
8
+ }"
9
+ @action="toDetail">
10
+ <template slot="button">
11
+ <a-button @click="add">
12
+ <a-icon type="plus"/>
13
+ 发起报建
14
+ </a-button>
15
+ </template>
16
+ </x-form-table>
17
+ <a-modal
18
+ v-model="applyAddFlag"
19
+ :footer="null"
20
+ :dialog-style="{ top: '5rem' }"
21
+ :z-index="1001"
22
+ title="发起报建"
23
+ :destroyOnClose="true">
24
+ <x-add-native-form ref="xForm" @onSubmit="applySubmit"/>
25
+ </a-modal>
26
+ <WorkflowDetail ref="workFlow" @success="success"></WorkflowDetail>
27
+ </a-card>
28
+ </template>
29
+
1
30
  <script>
2
31
  import WorkflowDetail from '@vue2-client/pages/WorkflowDetail/WorkflowDetail.vue'
32
+ import XFormTable from '@vue2-client/base-client/components/common/XFormTable/XFormTable'
33
+ import XAddNativeForm from '@vue2-client/base-client/components/common/XAddNativeForm/XAddNativeForm.vue'
34
+ import { getConfigByName, runLogic } from '@vue2-client/services/api/common'
35
+ import { mapState } from 'vuex'
3
36
 
4
37
  export default {
5
- name: 'WorkFlowDemo',
6
- components: { WorkflowDetail },
7
- mounted () {
8
- this.$refs.workFlow.init({
9
- workflowId: '11'
10
- })
38
+ name: 'Apply',
39
+ components: {
40
+ XFormTable,
41
+ XAddNativeForm,
42
+ WorkflowDetail
43
+ },
44
+ data () {
45
+ return {
46
+ // 查询配置文件名
47
+ queryParamsName: 'applyCRUD',
48
+ // 发起报建弹框控制
49
+ applyAddFlag: false
50
+ }
51
+ },
52
+ computed: {
53
+ ...mapState('account', { currUser: 'user' }),
11
54
  },
12
55
  methods: {
13
- /**
14
- * 流程详情页成功
15
- * @param note 备注信息
16
- * @param form 表单信息
17
- * @param workflowId
18
- */
19
- success ({ note, form, workflowId }) {
20
- console.log('success', note, form, workflowId)
56
+ add () {
57
+ this.applyAddFlag = true
58
+ this.$nextTick(
59
+ () => {
60
+ getConfigByName('addApplyForm', 'af-apply', (res) => {
61
+ this.$refs.xForm.init({
62
+ businessType: '新增',
63
+ title: '发起报建',
64
+ ...res
65
+ })
66
+ })
67
+ }
68
+ )
69
+ },
70
+ applySubmit (formData) {
71
+ runLogic('addApply', formData).then(
72
+ res => {
73
+ this.$message.success('发起报建成功')
74
+ this.applyAddFlag = false
75
+ }
76
+ ).catch(() => {
77
+ this.applyAddFlag = false
78
+ })
21
79
  },
22
- /**
23
- * 流程详情页成功
24
- * @param note 备注信息
25
- * @param form 表单信息
26
- * @param workflowId 工作流id
27
- * @param fromStepId 起ID
28
- * @param toStepId 往ID
29
- * @param successStepId 完成步骤id
30
- * @param successStep 完成步骤名称
31
- * @param fromStep 起步骤名称
32
- * @param toStep 往步骤名称
33
- */
34
- nextClick ({ note, form, workflowId, fromStepId, toStepId, fromStep, toStep, successStepId, successStep }) {
35
- console.log('success', note, form, workflowId, fromStepId, toStepId, fromStep, toStep, successStepId, successStep)
80
+ success () {
81
+ console.log('完工')
82
+ },
83
+ toDetail (record, id) {
84
+ this.$refs.workFlow.init({
85
+ workflowId: record.twf_id
86
+ })
36
87
  }
37
88
  }
38
89
  }
39
90
  </script>
40
-
41
- <template>
42
- <WorkflowDetail ref="workFlow" @success="success" @nextClick="nextClick"></WorkflowDetail>
43
- </template>
44
-
45
- <style scoped lang="less">
46
-
47
- </style>
@@ -45,11 +45,11 @@
45
45
  bordered
46
46
  >
47
47
  <a-descriptions-item
48
- v-for="(value,key) in formCompletedDataPreview.data"
49
- :key="key"
48
+ v-for="item in formCompletedDataPreview.data"
49
+ :key="item.label"
50
50
  >
51
- <span slot="label" style="color: #000">{{ key }}</span>
52
- <div style="white-space: pre-wrap">{{ value }}</div>
51
+ <span slot="label" style="color: #000">{{ item.label }}</span>
52
+ <div style="white-space: pre-wrap">{{ item.value }}</div>
53
53
  </a-descriptions-item>
54
54
  </a-descriptions>
55
55
  <div v-if="formCompletedDataPreview.note">
@@ -786,33 +786,28 @@ export default {
786
786
  formCompletedDataPreview = JSON.parse(JSON.stringify(this.formCompletedData))
787
787
  // 使用字段定义中内容,将回显数据的列名,替换为定义的中文名
788
788
  const formData = formCompletedDataPreview.data
789
- for (const key in formData) {
790
- for (let i = 0; i < this.targetStepDefine.length; i++) {
791
- const stepDefine = this.targetStepDefine[i]
792
- if (key === stepDefine.model) {
793
- if (!['FilesId', 'Images'].includes(key)) {
794
- // 读取字典值
795
- if (stepDefine.formType === 'select' && stepDefine.selectType === 'key') {
796
- for (const item of this.$appdata.getDictionaryList(stepDefine.selectKey)) {
797
- if (item.value === formData[key]) {
798
- formData[stepDefine.name] = item.label
799
- break
800
- }
801
- }
802
- } else {
803
- formData[stepDefine.name] = formData[key]
789
+ // 新增:有序处理表单数据,保证顺序与formJson一致
790
+ const orderedFormData = []
791
+ for (const stepDefine of this.targetStepDefine) {
792
+ const key = stepDefine.model
793
+ if (formData && Object.prototype.hasOwnProperty.call(formData, key)) {
794
+ let value = formData[key]
795
+ // 读取字典值
796
+ if (stepDefine.formType === 'select' && stepDefine.selectType === 'key') {
797
+ for (const item of this.$appdata.getDictionaryList(stepDefine.selectKey)) {
798
+ if (item.value === value) {
799
+ value = item.label
800
+ break
804
801
  }
805
802
  }
806
- if (key !== stepDefine.name) {
807
- delete formData[key]
808
- }
809
- break
810
803
  }
804
+ orderedFormData.push({
805
+ label: stepDefine.name,
806
+ value
807
+ })
811
808
  }
812
809
  }
813
- if (!Object.keys(formCompletedDataPreview.data).length) {
814
- formCompletedDataPreview.data = null
815
- }
810
+ formCompletedDataPreview.data = orderedFormData
816
811
  // 备注
817
812
  formCompletedDataPreview.note = this.stepsForChild[stepId - 1].note
818
813
  if (!formCompletedDataPreview.data && !formCompletedDataPreview.files.length && !formCompletedDataPreview.images.length && !formCompletedDataPreview.note) {
@@ -55,17 +55,16 @@ routerResource.newDynamicStatistics = () => import('@vue2-client/pages/NewDynami
55
55
  routerResource.example = {
56
56
  path: 'example',
57
57
  name: '示例主页面',
58
- // component: () => import('@vue2-client/base-client/components/common/XCalendar/demo.vue'),
59
- // component: () => import('@vue2-client/base-client/components/his/XTitle/XTitle.vue'),
60
- // component: () => import('@vue2-client/base-client/components/his/XCharge/XCharge.vue'),
61
- // component: () => import('@vue2-client/base-client/components/common/XAddNativeForm/demo.vue'),
58
+ // component: () => import('@vue2-client/base-client/components/common/XDescriptions/demo.vue'),
59
+ component: () => import('@vue2-client/base-client/components/common/XAddNativeForm/demo.vue'),
62
60
  // component: () => import('@vue2-client/base-client/components/common/XFormGroup/demo.vue'),
63
- component: () => import('@vue2-client/base-client/components/common/XReportGrid/XReportDemo.vue'),
64
- // component: () => import('@vue2-client/base-client/components/common/XFormTable/d emo.vue'),
61
+ // component: () => import('@vue2-client/base-client/components/common/XReport/XReportDemo.vue'),
62
+ // component: () => import('@vue2-client/base-client/components/common/XFormTable/demo.vue'),
65
63
  // component: () => import('@vue2-client/base-client/components/common/XDatePicker/demo.vue'),
66
64
  // component: () => import('@vue2-client/base-client/components/common/XTab/XTabDemo.vue'),
67
65
  // component: () => import('@vue2-client/base-client/components/common/XRate/demo.vue'),
68
66
  // component: () => import('@vue2-client/base-client/components/common/XForm/demo.vue'),
67
+ // component: () => import('@vue2-client/base-client/components/his/XTimeSelect/XTimeSelectDemo.vue'),
69
68
  // component: () => import('@vue2-client/pages/WorkflowDetail/WorkFlowDemo.vue'),
70
69
  // component: () => import('@vue2-client/base-client/components/common/XConversation/XConversationDemo.vue'),
71
70
  // component: () => import('@vue2-client/base-client/components/common/XButtons/XButtonDemo.vue'),
@@ -1,5 +1,4 @@
1
1
  import { getSystemVersion, METHOD, request } from '@vue2-client/utils/request'
2
- import { fetchEventSource } from '@microsoft/fetch-event-source'
3
2
  import { ACCESS_TOKEN, V4_ACCESS_TOKEN } from '@vue2-client/store/mutation-types'
4
3
 
5
4
  /**
package/vue.config.js CHANGED
@@ -11,12 +11,12 @@ const productionGzipExtensions = ['js', 'css']
11
11
  const isProd = process.env.NODE_ENV === 'production'
12
12
 
13
13
  // v4 产品演示
14
- const v3Server = 'http://aote-office.8866.org:31567'
14
+ const v3Server = 'http://192.168.50.67:31567'
15
15
  // const gateway = 'http://192.168.50.67:31467'
16
16
  // const testUpload = 'http://123.60.214.109:8406'
17
17
  const OSSServerDev = 'http://192.168.50.67:30351'
18
18
  // const revenue = 'http://aote-office.8866.org:31567'
19
- const revenue = 'http://aote-office.8866.org:31567'
19
+ const revenue = 'http://192.168.50.67:31567'
20
20
  // const OSSServerProd = 'http://192.168.50.67:31351'
21
21
  // const testUploadLocal = 'http://127.0.0.1:9001'
22
22
  // v3 铜川
@@ -83,7 +83,7 @@ module.exports = {
83
83
  // v3用
84
84
  // pathRewrite: { '^/api/af-system/': '/rs/', '^/api/af-iot/': '/rs/' },
85
85
  // pathRewrite: { '^/api/': '/' },
86
- target: v3Server,
86
+ target: revenue,
87
87
  changeOrigin: true
88
88
  },
89
89
  '/devApi': {