imeik-bizui 2.2.8 → 2.3.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.
@@ -629,6 +629,397 @@ const typeItems = {
629
629
  placeholder: '举例:收集受试者灯**例,术前术后照片等'
630
630
  }
631
631
  }
632
+ ],
633
+ // 会议展示 2000888819456401411
634
+ // 会议名称 申请中心 必填 文本100
635
+ // 会议地点 申请中心 必填 文本100
636
+ // 会议时间 申请中心 截止日期必须晚于或等于开始日期 必填 日期
637
+ // 特邀嘉宾 申请中心 必填 文本100
638
+ // 参会人数 申请中心 必填 文本100
639
+ // 预期目标 申请中心 必填 文本5000
640
+ '2000888819456401411': [
641
+ {
642
+ type: 'ImInput',
643
+ prop: 'meetingName',
644
+ label: '会议名称',
645
+ rules: [{ required: true, message: '请输入会议名称' }],
646
+ attrs: {
647
+ placeholder: '请输入会议名称',
648
+ maxLength: 100,
649
+ showWordLimit: true
650
+ }
651
+ },
652
+ {
653
+ type: 'ImInput',
654
+ prop: 'meetingLocation',
655
+ label: '会议地点',
656
+ rules: [{ required: true, message: '请输入会议地点' }],
657
+ attrs: {
658
+ placeholder: '请输入会议地点',
659
+ maxLength: 100,
660
+ showWordLimit: true
661
+ }
662
+ },
663
+ {
664
+ type: 'ImDatePicker',
665
+ prop: 'meetingTime',
666
+ label: '会议时间',
667
+ rules: [{ required: true, message: '请选择会议时间' }],
668
+ attrs: {
669
+ style: 'width: 100%',
670
+ type: 'daterange',
671
+ startPlaceholder: '开始日期',
672
+ endPlaceholder: '截止日期',
673
+ placeholder: '请选择会议时间'
674
+ }
675
+ },
676
+ {
677
+ type: 'ImInput',
678
+ prop: 'meetingGuest',
679
+ label: '特邀嘉宾',
680
+ rules: [{ required: true, message: '请输入特邀嘉宾' }],
681
+ attrs: {
682
+ placeholder: '请输入特邀嘉宾',
683
+ maxLength: 100,
684
+ showWordLimit: true
685
+ }
686
+ },
687
+ {
688
+ type: 'ImInputNumber',
689
+ prop: 'meetingAttendees',
690
+ label: '参会人数',
691
+ rules: [{ required: true, message: '请输入参会人数' }],
692
+ attrs: {
693
+ style: 'width: 100%',
694
+ placeholder: '请输入参会人数',
695
+ controlsPosition: 'right',
696
+ min: 1,
697
+ max: 999999
698
+ }
699
+ },
700
+ {
701
+ type: 'ImBr',
702
+ prop: 'br', // 仅用于占位,可随意命名
703
+ notInForm: true // 必须设置为 true,避免被视为表单数据字段
704
+ },
705
+ {
706
+ type: 'ImInput',
707
+ prop: 'meetingExpectation',
708
+ label: '预期目标',
709
+ span: 24,
710
+ rules: [{ required: true, message: '请输入预期目标' }],
711
+ attrs: {
712
+ type: 'textarea',
713
+ placeholder: '请输入预期目标',
714
+ maxLength: 5000,
715
+ showWordLimit: true,
716
+ rows: 4
717
+ }
718
+ }
719
+ ],
720
+ // 市场推广支持 2000888819464790019
721
+ // 活动名称 申请中心 必填 文本100
722
+ // 推广渠道 申请中心 必填 文本100
723
+ // 推广人数 申请中心 必填 文本50
724
+ // 推广时间 申请中心 必填 日期
725
+ // 预期目标 申请中心 必填 文本5000
726
+ '2000888819464790019': [
727
+ {
728
+ type: 'ImInput',
729
+ prop: 'promotionActivityName',
730
+ label: '活动名称',
731
+ rules: [{ required: true, message: '请输入活动名称' }],
732
+ attrs: {
733
+ placeholder: '请输入活动名称',
734
+ maxLength: 100,
735
+ showWordLimit: true
736
+ }
737
+ },
738
+ {
739
+ type: 'ImInput',
740
+ prop: 'promotionChannel',
741
+ label: '推广渠道',
742
+ rules: [{ required: true, message: '请输入推广渠道' }],
743
+ attrs: {
744
+ placeholder: '请输入推广渠道',
745
+ maxLength: 100,
746
+ showWordLimit: true
747
+ }
748
+ },
749
+ {
750
+ type: 'ImInputNumber',
751
+ prop: 'promotionCount',
752
+ label: '推广人数',
753
+ rules: [{ required: true, message: '请输入推广人数' }],
754
+ attrs: {
755
+ style: 'width: 100%',
756
+ placeholder: '请输入推广人数',
757
+ controlsPosition: 'right',
758
+ min: 1,
759
+ max: 999999
760
+ }
761
+ },
762
+ {
763
+ type: 'ImDatePicker',
764
+ prop: 'promotionTime',
765
+ label: '推广时间',
766
+ rules: [{ required: true, message: '请选择推广时间' }],
767
+ attrs: {
768
+ style: 'width: 100%',
769
+ placeholder: '请选择推广时间'
770
+ }
771
+ },
772
+ {
773
+ type: 'ImBr',
774
+ prop: 'br',
775
+ notInForm: true
776
+ },
777
+ {
778
+ type: 'ImInput',
779
+ prop: 'promotionExpectation',
780
+ label: '预期目标',
781
+ span: 24,
782
+ rules: [{ required: true, message: '请输入预期目标' }],
783
+ attrs: {
784
+ type: 'textarea',
785
+ placeholder: '请输入预期目标',
786
+ maxLength: 5000,
787
+ showWordLimit: true,
788
+ rows: 4
789
+ }
790
+ }
791
+ ],
792
+ // 重点客户开发 2000888819468984322
793
+ // 客户名称 申请中心 必填 文本100
794
+ // 赠送人姓名和职务 申请中心 必填 文本100
795
+ // 预期目标 申请中心 必填 文本5000
796
+ '2000888819468984322': [
797
+ {
798
+ type: 'ImInput',
799
+ prop: 'customerName',
800
+ label: '客户名称',
801
+ rules: [{ required: true, message: '请输入客户名称' }],
802
+ attrs: {
803
+ placeholder: '请输入客户名称',
804
+ maxLength: 100,
805
+ showWordLimit: true
806
+ }
807
+ },
808
+ {
809
+ type: 'ImInput',
810
+ prop: 'giftPersonNameAndPosition',
811
+ label: '赠送人姓名和职务',
812
+ rules: [{ required: true, message: '请输入赠送人姓名和职务' }],
813
+ attrs: {
814
+ placeholder: '请输入赠送人姓名和职务',
815
+ maxLength: 100,
816
+ showWordLimit: true
817
+ }
818
+ },
819
+ {
820
+ type: 'ImBr',
821
+ prop: 'br',
822
+ notInForm: true
823
+ },
824
+ {
825
+ type: 'ImInput',
826
+ prop: 'expectationTarget',
827
+ label: '预期目标',
828
+ rules: [{ required: true, message: '请输入预期目标' }],
829
+ span: 24,
830
+ attrs: {
831
+ type: 'textarea',
832
+ rows: 4,
833
+ maxLength: 5000,
834
+ 'show-word-limit': true,
835
+ placeholder: '请输入预期目标'
836
+ }
837
+ }
838
+ ],
839
+ // 产品测试 2000888819481567235
840
+ // 测试者姓名/机构 申请中心 必填 文本100
841
+ // 测试时间 申请中心 必填 日期
842
+ // 测试目标 申请中心 必填 文本5000
843
+ '2000888819481567235': [
844
+ {
845
+ type: 'ImInput',
846
+ prop: 'testerNameAndOrganization',
847
+ label: '测试者姓名/机构',
848
+ rules: [{ required: true, message: '请输入测试者姓名/机构' }],
849
+ attrs: {
850
+ placeholder: '请输入测试者姓名/机构',
851
+ maxLength: 100,
852
+ showWordLimit: true
853
+ }
854
+ },
855
+ {
856
+ type: 'ImDatePicker',
857
+ prop: 'testerTime',
858
+ label: '测试时间',
859
+ rules: [{ required: true, message: '请选择测试时间' }],
860
+ attrs: {
861
+ style: 'width: 100%',
862
+ placeholder: '请选择测试时间'
863
+ }
864
+ },
865
+ {
866
+ type: 'ImBr',
867
+ prop: 'br',
868
+ notInForm: true
869
+ },
870
+ {
871
+ type: 'ImInput',
872
+ prop: 'testerTarget',
873
+ label: '测试目标',
874
+ rules: [{ required: true, message: '请输入测试目标' }],
875
+ span: 24,
876
+ attrs: {
877
+ type: 'textarea',
878
+ rows: 4,
879
+ maxLength: 5000,
880
+ 'show-word-limit': true,
881
+ placeholder: '请输入测试目标'
882
+ }
883
+ }
884
+ ],
885
+ // 客户维护 2000888819485761538
886
+ // 客户名称(建档) 申请中心 支持模糊搜索 必填 下拉单选
887
+ // 维护原因 申请中心 必填 文本5000
888
+ // 维护目标 申请中心 必填 文本5000
889
+ '2000888819485761538': [
890
+ {
891
+ type: 'FieldTagComponent',
892
+ prop: 'applyCustomer',
893
+ label: '客户名称(建档)',
894
+ rules: [{ required: true, message: '请选择客户名称(建档)' }],
895
+ span: 24,
896
+ attrs: {
897
+ multiple: false,
898
+ placeholder: '请选择客户名称(建档)',
899
+ tagCode: 'applyCustomer',
900
+ tagViewType: 'ImServerSelect',
901
+ tagValueUrl: 'https://tagcenter-backend-test.imeik.com/tagcenter-admin/dictionary/getCustomListByName'
902
+ }
903
+ },
904
+ {
905
+ type: 'ImInput',
906
+ prop: 'maintenanceReason',
907
+ label: '维护原因',
908
+ rules: [{ required: true, message: '请输入维护原因' }],
909
+ span: 24,
910
+ attrs: {
911
+ type: 'textarea',
912
+ placeholder: '请输入维护原因',
913
+ maxLength: 5000,
914
+ 'show-word-limit': true,
915
+ rows: 4
916
+ }
917
+ },
918
+ {
919
+ type: 'ImInput',
920
+ prop: 'maintenanceTarget',
921
+ label: '维护目标',
922
+ rules: [{ required: true, message: '请输入维护目标' }],
923
+ span: 24,
924
+ attrs: {
925
+ type: 'textarea',
926
+ placeholder: '请输入维护目标',
927
+ maxLength: 5000,
928
+ 'show-word-limit': true,
929
+ rows: 4
930
+ }
931
+ }
932
+ ],
933
+ // 业务招待费 2000888819494150146
934
+ // 客户名称 申请中心 必填 文本100
935
+ // 赠送人姓名和职务 申请中心 必填 文本100
936
+ // 预期目标 申请中心 必填 文本5000
937
+ '2000888819494150146': [
938
+ {
939
+ type: 'ImInput',
940
+ prop: 'customerName',
941
+ label: '客户名称',
942
+ rules: [{ required: true, message: '请输入客户名称' }],
943
+ attrs: {
944
+ placeholder: '请输入客户名称',
945
+ maxLength: 100,
946
+ showWordLimit: true
947
+ }
948
+ },
949
+ {
950
+ type: 'ImInput',
951
+ prop: 'giftPersonNameAndPosition',
952
+ label: '赠送人姓名和职务',
953
+ rules: [{ required: true, message: '请输入赠送人姓名和职务' }],
954
+ attrs: {
955
+ placeholder: '请输入赠送人姓名和职务',
956
+ maxLength: 100,
957
+ showWordLimit: true
958
+ }
959
+ },
960
+ {
961
+ type: 'ImBr',
962
+ prop: 'br',
963
+ notInForm: true
964
+ },
965
+ {
966
+ type: 'ImInput',
967
+ prop: 'expectationTarget',
968
+ label: '预期目标',
969
+ rules: [{ required: true, message: '请输入预期目标' }],
970
+ span: 24,
971
+ attrs: {
972
+ type: 'textarea',
973
+ rows: 4,
974
+ maxLength: 5000,
975
+ 'show-word-limit': true,
976
+ placeholder: '请输入预期目标'
977
+ }
978
+ }
979
+ ],
980
+ // 产品再加工 2000888819502538755
981
+ // 再加工供应商名称 申请中心 必填 文本100
982
+ // 再加工返回时间 申请中心 必填 日期
983
+ // 再加工后用途 申请中心 必填 文本5000
984
+ '2000888819502538755': [
985
+ {
986
+ type: 'ImInput',
987
+ prop: 'reprocessingSupplierName',
988
+ label: '再加工供应商名称',
989
+ rules: [{ required: true, message: '请输入再加工供应商名称' }],
990
+ attrs: {
991
+ placeholder: '请输入再加工供应商名称',
992
+ maxLength: 100,
993
+ showWordLimit: true
994
+ }
995
+ },
996
+ {
997
+ type: 'ImDatePicker',
998
+ prop: 'reprocessingReturnTime',
999
+ label: '再加工返回时间',
1000
+ rules: [{ required: true, message: '请选择再加工返回时间' }],
1001
+ attrs: {
1002
+ style: 'width: 100%',
1003
+ placeholder: '请选择再加工返回时间'
1004
+ }
1005
+ },
1006
+ {
1007
+ type: 'ImBr',
1008
+ prop: 'br',
1009
+ notInForm: true
1010
+ },
1011
+ {
1012
+ type: 'ImInput',
1013
+ prop: 'reprocessingAfterPurpose',
1014
+ label: '再加工后用途',
1015
+ rules: [{ required: true, message: '请输入再加工后用途' }],
1016
+ attrs: {
1017
+ placeholder: '请输入再加工后用途',
1018
+ maxLength: 5000,
1019
+ 'show-word-limit': true,
1020
+ rows: 4
1021
+ }
1022
+ }
632
1023
  ]
633
1024
  }
634
1025
  export const getTypeItems = (type, isView = true) => {
@@ -8,7 +8,7 @@
8
8
 
9
9
  <script>
10
10
  import { getTypeItems } from './data'
11
- import FieldSeleceDoctor from '../FieldSeleceDoctor/index.vue'
11
+ import FieldSeleceDoctor from '../FieldSeleceDoctor2/index.vue'
12
12
  import { getTagManageList, getEcsErpCode } from '../../api/applycenter'
13
13
  import Axios from 'axios'
14
14
  const defaultBelongCompany = '201'
@@ -52,7 +52,8 @@ export default {
52
52
  },
53
53
  formItems: []
54
54
  },
55
- belongCompany: defaultBelongCompany
55
+ belongCompany: defaultBelongCompany,
56
+ applyTypeOptions: []
56
57
  }
57
58
  },
58
59
  computed: {
@@ -74,7 +75,7 @@ export default {
74
75
  label: '申请类型',
75
76
  rules: [{ required: !this.isView, message: '请选择申请类型', trigger: 'blur' }],
76
77
  attrs: {
77
- options: [],
78
+ options: this.applyTypeOptions,
78
79
  style: {
79
80
  width: '100%',
80
81
  tips: ''
@@ -203,15 +204,15 @@ export default {
203
204
  })) || []
204
205
  )
205
206
  }) || []
206
- const resData = []
207
+ this.applyTypeOptions = []
207
208
  if (this.attrs.applyTypeOptions?.options && this.attrs.applyTypeOptions?.options.length) {
208
209
  allData?.forEach((element) => {
209
210
  if (this.attrs.applyTypeOptions.options.includes(element.value)) {
210
- resData.push(element)
211
+ this.applyTypeOptions.push(element)
211
212
  }
212
213
  })
213
214
  }
214
- this.formConfig.formItems[0].attrs.options = resData
215
+ // this.formConfig.formItems[0].attrs.options = this.applyTypeOptions
215
216
  this.handlingConfigurationPrope()
216
217
  this.changeShowItems()
217
218
  this.setTypeDataOnChange()
@@ -125,6 +125,23 @@
125
125
  <p v-if="!hiddenAddress" class="address-info">收货地址:{{ `${row.materialReceivingProvince || ''}${row.materialReceivingCity || ''}${row.materialReceivingArea || ''}${row.materialReceivingAddress || ''}` }}</p>
126
126
  <p v-if="!isView" class="address" @click="changeAddressInfo(row, $index)">修改收货地址</p>
127
127
  </template>
128
+ <!-- 单价 -->
129
+ <template slot="price" slot-scope="{ row }">
130
+ <ImInputNumber v-if="!isView" v-model="row.materialPrice" :min="0" :max="1000000" placeholder="请输入价格"></ImInputNumber>
131
+ <p v-else class="price">{{ row.materialPrice || '-' }}</p>
132
+ </template>
133
+ <!-- 小计 -->
134
+ <template slot="subtotal" slot-scope="{ row }">
135
+ <p class="subtotal">{{ (row.materialPrice || 0) * (row.materialQuantity || 1) }}</p>
136
+ </template>
137
+ <!-- 税率 -->
138
+ <template slot="rate" slot-scope="{ row }">
139
+ <p class="rate">{{ row.materialRate }}</p>
140
+ </template>
141
+ <!-- 库存 -->
142
+ <template slot="stock" slot-scope="{ row }">
143
+ <p class="stock">{{ row.materialStock || '-' }}</p>
144
+ </template>
128
145
  <template slot="operate" slot-scope="{ row, $index }">
129
146
  <el-button class="delete-button" type="text" @click="deleteProduct(row, $index)">移除</el-button>
130
147
  </template>
@@ -299,6 +316,42 @@ export default {
299
316
  'min-width': '205'
300
317
  }
301
318
  },
319
+ price: {
320
+ prop: 'materialPrice',
321
+ label: '单价(元)',
322
+ type: 'slot',
323
+ slot: 'price',
324
+ attrs: {
325
+ 'min-width': '150'
326
+ }
327
+ },
328
+ subtotal: {
329
+ prop: 'subtotal',
330
+ label: '小计(元)',
331
+ type: 'slot',
332
+ slot: 'subtotal',
333
+ attrs: {
334
+ 'min-width': '150'
335
+ }
336
+ },
337
+ rate: {
338
+ prop: 'rate',
339
+ label: '税率',
340
+ type: 'slot',
341
+ slot: 'rate',
342
+ attrs: {
343
+ 'min-width': '150'
344
+ }
345
+ },
346
+ stock: {
347
+ prop: 'materialStock',
348
+ label: '库存',
349
+ type: 'slot',
350
+ slot: 'stock',
351
+ attrs: {
352
+ 'min-width': '150'
353
+ }
354
+ },
302
355
  operate: {
303
356
  prop: 'operate',
304
357
  label: '操作',
@@ -59,6 +59,8 @@ export default {
59
59
  purpose: ['purpose'], // 目的列
60
60
  address: ['addressInfo'],
61
61
  warehouse: ['warehouse'], // 仓库
62
+ priceInfo: ['price', 'subtotal', 'rate'], // 价格列
63
+ stockInfo: ['stock'], // 库存列
62
64
  formPropControl: undefined
63
65
  }
64
66
  },
@@ -80,6 +82,12 @@ export default {
80
82
  },
81
83
  deep: true,
82
84
  immediate: true
85
+ },
86
+ 'attrs.materialConfig': {
87
+ immediate: true,
88
+ handler() {
89
+ this.handleTableData()
90
+ }
83
91
  }
84
92
  },
85
93
  created() {
@@ -166,6 +174,7 @@ export default {
166
174
  this.onUpdate()
167
175
  },
168
176
  handleTableData() {
177
+ this.tableItemArr = []
169
178
  const allData = {
170
179
  baseInfo: this.baseInfo,
171
180
  budget: this.budget,
@@ -173,7 +182,9 @@ export default {
173
182
  batch: this.batch,
174
183
  purpose: this.purpose,
175
184
  warehouse: this.warehouse,
176
- address: this.address
185
+ address: this.address,
186
+ priceInfo: this.priceInfo,
187
+ stockInfo: this.stockInfo
177
188
  }
178
189
  this.attrs.materialConfig?.forEach((item) => {
179
190
  this.tableItemArr = this.tableItemArr.concat(allData[item])