vue2-client 1.15.101 → 1.15.103

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 (184) hide show
  1. package/.history/public/his/editor/editor_20250606134713.html +51 -0
  2. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527173925.vue +509 -0
  3. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174316.vue +524 -0
  4. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174419.vue +524 -0
  5. package/.history/src/base-client/components/common/AddressSearchCombobox/AddressSearchCombobox_20250527174422.vue +524 -0
  6. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172825.vue +207 -0
  7. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172945.vue +211 -0
  8. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611172949.vue +212 -0
  9. package/.history/src/base-client/components/common/XAddReport/XAddReport_20250611173010.vue +212 -0
  10. package/.history/src/base-client/components/common/XForm/XFormItem_20250508134122.vue +1320 -0
  11. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171604.vue +1332 -0
  12. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171613.vue +1331 -0
  13. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171703.vue +1331 -0
  14. package/.history/src/base-client/components/common/XForm/XFormItem_20250527171720.vue +1331 -0
  15. package/.history/src/base-client/components/common/XForm/XFormItem_20250527174327.vue +1339 -0
  16. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612092804.vue +731 -0
  17. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612112546.vue +748 -0
  18. package/.history/src/base-client/components/common/XReportGrid/XReportTrGroup_20250612113808.vue +748 -0
  19. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115237.vue +1071 -0
  20. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115346.vue +1078 -0
  21. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115350.vue +1077 -0
  22. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115415.vue +1077 -0
  23. package/.history/src/base-client/components/common/XReportGrid/XReport_20250612115429.vue +1077 -0
  24. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611091619.vue +442 -0
  25. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092547.vue +442 -0
  26. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092552.vue +442 -0
  27. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092744.vue +475 -0
  28. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092955.vue +475 -0
  29. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611092957.vue +475 -0
  30. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095652.vue +477 -0
  31. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095701.vue +477 -0
  32. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611095704.vue +477 -0
  33. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100005.vue +473 -0
  34. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100011.vue +473 -0
  35. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100014.vue +473 -0
  36. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100833.vue +473 -0
  37. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100853.vue +473 -0
  38. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611100940.vue +473 -0
  39. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101011.vue +473 -0
  40. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101013.vue +473 -0
  41. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101014.vue +473 -0
  42. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101159.vue +473 -0
  43. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101238.vue +474 -0
  44. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101240.vue +474 -0
  45. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101242.vue +474 -0
  46. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101404.vue +472 -0
  47. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101410.vue +472 -0
  48. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101459.vue +472 -0
  49. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101500.vue +472 -0
  50. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101502.vue +472 -0
  51. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101504.vue +472 -0
  52. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101610.vue +501 -0
  53. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101700.vue +501 -0
  54. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101702.vue +501 -0
  55. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101741.vue +504 -0
  56. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101749.vue +504 -0
  57. package/.history/src/base-client/components/his/XHisEditor/XHisEditor_20250611101759.vue +504 -0
  58. package/.history/src/base-client/components/his/XHisEditor/dome_20250611091349.vue +131 -0
  59. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105854.vue +160 -0
  60. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105902.vue +160 -0
  61. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105924.vue +160 -0
  62. package/.history/src/base-client/components/his/XHisEditor/dome_20250611105932.vue +158 -0
  63. package/.history/src/base-client/components/his/XList/XList_20250609135848.vue +173 -0
  64. package/.history/src/base-client/components/his/XList/XList_20250609141026.vue +222 -0
  65. package/.history/src/base-client/components/his/XList/XList_20250609141035.vue +229 -0
  66. package/.history/src/base-client/components/his/XList/XList_20250609141103.vue +229 -0
  67. package/.history/src/base-client/components/his/XList/XList_20250609141105.vue +229 -0
  68. package/.history/src/base-client/components/his/XList/XList_20250609141334.vue +241 -0
  69. package/.history/src/base-client/components/his/XList/XList_20250609141404.vue +241 -0
  70. package/.history/src/base-client/components/his/XList/XList_20250609141406.vue +241 -0
  71. package/.history/src/base-client/components/his/XList/XList_20250609141801.vue +245 -0
  72. package/.history/src/base-client/components/his/XList/XList_20250609142033.vue +245 -0
  73. package/.history/src/base-client/components/his/XList/XList_20250609142038.vue +245 -0
  74. package/.history/src/base-client/components/his/XList/XList_20250609142435.vue +255 -0
  75. package/.history/src/base-client/components/his/XList/XList_20250609142503.vue +255 -0
  76. package/.history/src/base-client/components/his/XList/XList_20250609142504.vue +255 -0
  77. package/.history/src/base-client/components/his/XList/XList_20250609143012.vue +270 -0
  78. package/.history/src/base-client/components/his/XList/XList_20250609143044.vue +270 -0
  79. package/.history/src/base-client/components/his/XList/XList_20250609143046.vue +270 -0
  80. package/.history/src/base-client/components/his/XList/XList_20250609143210.vue +270 -0
  81. package/.history/src/base-client/components/his/XList/XList_20250609144339.vue +294 -0
  82. package/.history/src/base-client/components/his/XList/XList_20250609144410.vue +294 -0
  83. package/.history/src/base-client/components/his/XList/XList_20250609144412.vue +294 -0
  84. package/.history/src/base-client/components/his/XList/XList_20250609144647.vue +303 -0
  85. package/.history/src/base-client/components/his/XList/XList_20250609144716.vue +303 -0
  86. package/.history/src/base-client/components/his/XList/XList_20250609144729.vue +303 -0
  87. package/.history/src/base-client/components/his/XList/XList_20250609151232.vue +288 -0
  88. package/.history/src/base-client/components/his/XList/XList_20250609151247.vue +288 -0
  89. package/.history/src/base-client/components/his/XList/XList_20250609151252.vue +288 -0
  90. package/.history/src/base-client/components/his/XList/XList_20250609161220.vue +317 -0
  91. package/.history/src/base-client/components/his/XList/XList_20250609161258.vue +306 -0
  92. package/.history/src/base-client/components/his/XList/XList_20250609161319.vue +306 -0
  93. package/.history/src/base-client/components/his/XList/XList_20250609161320.vue +306 -0
  94. package/.history/src/base-client/components/his/XList/XList_20250704142024.vue +495 -0
  95. package/.history/src/base-client/components/his/XList/XList_20250704142033.vue +495 -0
  96. package/.history/src/base-client/components/his/XList/XList_20250704142040.vue +494 -0
  97. package/.history/src/base-client/components/his/XList/XList_20250704142211.vue +494 -0
  98. package/.history/src/base-client/components/his/XList/XList_20250704142214.vue +494 -0
  99. package/.history/src/base-client/components/his/XList/XList_20250704143010.vue +495 -0
  100. package/.history/src/base-client/components/his/XList/XList_20250704143203.vue +495 -0
  101. package/.history/src/base-client/components/his/XList/XList_20250707095101.vue +492 -0
  102. package/.history/src/base-client/components/his/XList/XList_20250707100152.vue +492 -0
  103. package/.history/src/base-client/components/his/XList/XList_20250707100200.vue +485 -0
  104. package/.history/src/base-client/components/his/XList/XList_20250707100208.vue +485 -0
  105. package/.history/src/base-client/components/his/XList/XList_20250707100259.vue +488 -0
  106. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134604.vue +263 -0
  107. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134615.vue +302 -0
  108. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134621.vue +301 -0
  109. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134634.vue +311 -0
  110. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134644.vue +330 -0
  111. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134653.vue +330 -0
  112. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807134836.vue +330 -0
  113. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135247.vue +330 -0
  114. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135303.vue +354 -0
  115. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135316.vue +363 -0
  116. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135323.vue +363 -0
  117. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135334.vue +366 -0
  118. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135342.vue +364 -0
  119. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135349.vue +364 -0
  120. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135351.vue +346 -0
  121. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135354.vue +346 -0
  122. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135401.vue +346 -0
  123. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135406.vue +346 -0
  124. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807135424.vue +346 -0
  125. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807143043.vue +254 -0
  126. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807155506.vue +329 -0
  127. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807155535.vue +330 -0
  128. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807155543.vue +330 -0
  129. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807155926.vue +304 -0
  130. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807155928.vue +304 -0
  131. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172548.vue +298 -0
  132. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172609.vue +298 -0
  133. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172623.vue +298 -0
  134. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172631.vue +298 -0
  135. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172701.vue +298 -0
  136. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807172704.vue +298 -0
  137. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807175937.vue +290 -0
  138. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807175942.vue +290 -0
  139. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807180210.vue +290 -0
  140. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807180424.vue +290 -0
  141. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807180448.vue +290 -0
  142. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807180915.vue +262 -0
  143. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250807180917.vue +262 -0
  144. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101106.vue +283 -0
  145. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101112.vue +289 -0
  146. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101118.vue +289 -0
  147. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101129.vue +294 -0
  148. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101137.vue +318 -0
  149. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101145.vue +320 -0
  150. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101154.vue +320 -0
  151. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101211.vue +320 -0
  152. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101236.vue +320 -0
  153. package/.history/src/base-client/components/his/XShiftSchedule/XShiftSchedule_20250808101239.vue +320 -0
  154. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103845.vue +142 -0
  155. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103852.vue +142 -0
  156. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103857.vue +142 -0
  157. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103859.vue +142 -0
  158. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103907.vue +142 -0
  159. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103910.vue +142 -0
  160. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103911.vue +142 -0
  161. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103913.vue +142 -0
  162. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103916.vue +142 -0
  163. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807103931.vue +142 -0
  164. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145127.vue +85 -0
  165. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145136.vue +81 -0
  166. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145142.vue +81 -0
  167. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145145.vue +81 -0
  168. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145148.vue +81 -0
  169. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145151.vue +81 -0
  170. package/.history/src/base-client/components/his/XShiftSchedule/dome_20250807145155.vue +81 -0
  171. package/Users/objecrt/af-vue2-client/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +213 -0
  172. package/docs//345/207/275/346/225/260/344/275/277/347/224/250/347/233/270/345/205/263.md +6 -0
  173. package/package.json +1 -1
  174. package/src/base-client/components/TreeList/TreeList.vue +91 -0
  175. package/src/base-client/components/TreeList/TreeNode.vue +81 -0
  176. package/src/base-client/components/common/XCardSet/XTiltle.vue +191 -0
  177. package/src/base-client/components/his/XHisEditor/XHisEditor.vue +51 -2
  178. package/src/base-client/components/his/XHisEditor/dome.vue +144 -0
  179. package/src/base-client/components/his/XList/XList.vue +1 -1
  180. package/src/base-client/components/his/XShiftSchedule/XShiftSchedule.vue +145 -40
  181. package/src/base-client/components/his/XShiftSchedule/dome.vue +3 -3
  182. package/src/base-client/components/his/XTextCard/XTextCard.vue +207 -207
  183. package/src/base-client/components/his/threeTestOrders/editor.vue +111 -111
  184. package/src/layouts/tabs/TabsView.vue +1 -1
@@ -0,0 +1,329 @@
1
+ <template>
2
+ <div v-if="pattern == 'schedule'">
3
+ <a-table
4
+ :columns="columns"
5
+ :data-source="data"
6
+ :rowSelection="rowSelection"
7
+ :scroll="{ y: '70vh' }">
8
+ <span slot="time" class="time-title">
9
+ <span v-for="(item, index) in configData.timePeriod" :key="index">{{ item }}</span>
10
+ </span>
11
+ <div v-for="(item, index) in weekDays" :key="index" :slot="item.key" class="week_last_next_btn">
12
+ <a-button slot="lastWeek" icon="left" size="large" @click="handleLastWeek" v-if="item.title == '周一'" />
13
+ <div class="time-title">
14
+ <span>{{ item.title }}</span>
15
+ <span>{{ currentWeekDates[index].toLocaleDateString() }}</span>
16
+ </div>
17
+ <a-button slot="nextWeek" icon="right" size="large" @click="handleNextWeek" v-if="item.title == '周日'"/>
18
+ </div>
19
+ <template :slot="day.key" slot-scope="text, record" v-for="day in shiftTable">
20
+ <div class="time-title" :key="day.key">
21
+ <a-button v-for="(item, index) in record[day.key]" :key="index" @click="handleShiftChange(day.key, index, record)">{{ item === 1 || item === '1' ? '坐诊' : '休息' }}</a-button>
22
+ </div>
23
+ </template>
24
+ <template slot="sk_limit" slot-scope="text, record">
25
+ <a-input-number id="inputNumber" v-model="record.sk_limit" :min="configData.sk_limitMin" :max="configData.sk_limitMax" />
26
+ </template>
27
+ </a-table>
28
+ </div>
29
+ <div v-else-if="pattern == 'form'">
30
+ <a-table :columns="columns" :data-source="data" :row-selection="rowSelection" bordered>
31
+ <template v-for="col in columns" :slot="col.dataIndex" slot-scope="text, record, index">
32
+ <template v-if="col.type === 'input'">
33
+ <a-input
34
+ v-if="getRowSpan(record, col) !== 0"
35
+ :value="record[col.dataIndex]"
36
+ :placeholder="`请输入${col.title}`"
37
+ @input="val => handleInputChange(record, col.dataIndex, val)"
38
+ class="ant-input"
39
+ />
40
+ </template>
41
+ <template v-else-if="col.row">
42
+ <div v-if="getRowSpan(record, col) !== 0">{{ text }}</div>
43
+ </template>
44
+ <template v-else>
45
+ {{ text }}
46
+ </template>
47
+ </template>
48
+ </a-table>
49
+ </div>
50
+ </template>
51
+ <script>
52
+ import { getConfigByName, runLogic } from '@vue2-client/services/api/common'
53
+
54
+ export default {
55
+ data () {
56
+ return {
57
+ // 模式
58
+ pattern: 'schedule',
59
+ data: [],
60
+ // 列配置
61
+ columns: [],
62
+ column: [
63
+ {
64
+ title: 'name',
65
+ dataIndex: 'name',
66
+ key: 'name',
67
+ slots: { title: 'customTitle' },
68
+ scopedSlots: { customRender: 'name' }
69
+ },
70
+ {
71
+ title: 'targetValue',
72
+ dataIndex: 'targetValue',
73
+ key: 'targetValue',
74
+ scopedSlots: { customRender: 'targetValue' }
75
+ },
76
+ {
77
+ title: 'Address',
78
+ dataIndex: 'address',
79
+ key: 'address',
80
+ scopedSlots: { customRender: 'name' }
81
+ },
82
+ {
83
+ title: 'Tags',
84
+ key: 'tags',
85
+ dataIndex: 'tags',
86
+ scopedSlots: { customRender: 'tags' },
87
+ },
88
+ {
89
+ title: 'Action',
90
+ key: 'action',
91
+ scopedSlots: { customRender: 'action' },
92
+ }
93
+ ],
94
+ // 列名
95
+ columnNames: [],
96
+ // 选中的行键值集合
97
+ selectedRows: [],
98
+ // 选中的行信息集合
99
+ selectedRowKeys: [],
100
+ // 原始数据备份
101
+ originalData: [],
102
+ // 配置参数
103
+ configData: {},
104
+ // 当前显示的周次日期
105
+ currentWeekDates: [],
106
+ weekDays: [...['周一', '周二', '周三', '周四', '周五', '周六', '周日'].map((title, index) => {
107
+ const key = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'][index]
108
+ return { title, key }
109
+ })],
110
+ // 排班时间表
111
+ shiftTable: [...['周一', '周二', '周三', '周四', '周五', '周六', '周日'].map((title, index) => {
112
+ const key = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'][index]
113
+ return {
114
+ key, dataIndex: key, scopedSlots: { customRender: key }, slots: { title: key }, align: 'center', width: key === 'Monday' || key === 'Sunday' ? 170 : 120
115
+ }
116
+ }),
117
+ {
118
+ title: '排班数',
119
+ key: 'sk_limit',
120
+ dataIndex: 'sk_limit',
121
+ scopedSlots: { customRender: 'sk_limit' },
122
+ align: 'center'
123
+ }
124
+ ]
125
+ }
126
+ },
127
+ props: {
128
+ // 配置名
129
+ queryParamsName: {
130
+ type: String,
131
+ default: ''
132
+ },
133
+ // 服务名
134
+ serviceName: {
135
+ type: String,
136
+ default: 'af-his'
137
+ }
138
+ },
139
+ computed: {
140
+ rowSelection () {
141
+ return {
142
+ selectedRowKeys: this.selectedRowKeys,
143
+ onChange: (selectedRowKeys, selectedRows) => {
144
+ this.onSelectChange(selectedRowKeys, selectedRows)
145
+ }
146
+ }
147
+ }
148
+ },
149
+ mounted () {
150
+ this.initWeekDates()
151
+ },
152
+ methods: {
153
+ handleShiftChange (day, index, record) {
154
+ // 找到当前记录在data中的索引
155
+ const dataIndex = this.data.findIndex(item => item.id === record.id)
156
+ if (dataIndex === -1) return
157
+ // 获取当前状态
158
+ const currentValue = record[day][index]
159
+ const newValue = currentValue === 1 || currentValue === '1' ? 0 : 1
160
+ // 更新按钮显示
161
+ this.$set(record[day], index, newValue)
162
+ // 同步更新data中的数据
163
+ this.$set(this.data[dataIndex][day], index, newValue)
164
+ },
165
+ onSelectChange (selectedRowKeys, selectedRows) {
166
+ this.selectedRowKeys = selectedRowKeys
167
+ this.selectedRows = selectedRows
168
+ },
169
+ // 获取选中的行数据
170
+ getSelectedRowData () {
171
+ return this.selectedRows
172
+ },
173
+ // 获取全部数据
174
+ getAllTable () {
175
+ return this.data
176
+ },
177
+ // 初始化数据
178
+ async init (queryParamsName) {
179
+ getConfigByName(queryParamsName, this.serviceName, result => {
180
+ this.configData = result
181
+ runLogic(result.dataSource, {}, this.serviceName).then(res => {
182
+ this.columns = []
183
+ this.columns = JSON.parse(JSON.stringify(this.configData.columns))
184
+ this.pattern = result.pattern
185
+ if (this.pattern == 'schedule') {
186
+ for (let i = 0; i < this.shiftTable.length; i++) {
187
+ this.columns.push(this.shiftTable[i])
188
+ }
189
+ if (res && Array.isArray(res)) {
190
+ const weekDays = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']
191
+ const shifts = ['am', 'pm', 'evening']
192
+ let key = 0
193
+ this.data = res.map(item => {
194
+ const scheduleData = {
195
+ key: key++
196
+ }
197
+ this.configData.columnsName.forEach(columnName => { scheduleData[columnName] = item[columnName] })
198
+ weekDays.forEach(day => {
199
+ scheduleData[day.charAt(0).toUpperCase() + day.slice(1)] = shifts.map(shift => item[`f_${day}_${shift}`] === '1' ? 1 : 0)
200
+ })
201
+ return scheduleData
202
+ })
203
+ // 保存原始数据
204
+ this.originalData = JSON.parse(JSON.stringify(this.data))
205
+ }
206
+ } else if (this.pattern == 'form') {
207
+ console.log(res)
208
+ this.data = this.processFormData(res)
209
+ }
210
+ })
211
+ })
212
+ },
213
+ // 查询数据函数
214
+ filterTableData (filters) {
215
+ if (!filters || Object.keys(filters).length === 0) {
216
+ // 如果没有过滤条件,恢复原始数据
217
+ this.data = JSON.parse(JSON.stringify(this.originalData))
218
+ return
219
+ }
220
+ // 从原始数据开始过滤
221
+ this.data = this.originalData.filter(item => {
222
+ // 检查每一项是否满足所有过滤条件
223
+ return Object.entries(filters).every(([key, value]) => {
224
+ // 如果过滤值是字符串,进行模糊匹配
225
+ if (typeof value === 'string') {
226
+ return item[key] && item[key].toString().toLowerCase().includes(value.toLowerCase())
227
+ }
228
+ // 如果过滤值是数字,进行精确匹配
229
+ return item[key] === value
230
+ })
231
+ })
232
+ },
233
+ // form模式:行复制和rowSpan处理
234
+ processFormData (originalData) {
235
+ if (!originalData || !Array.isArray(originalData)) return []
236
+ // 查找有row属性的列
237
+ const rowColumns = this.columns.filter(col => col.row && col.row > 1)
238
+ if (rowColumns.length === 0) return originalData
239
+ // 复制行
240
+ const processedData = []
241
+ originalData.forEach((item, originalIndex) => {
242
+ // 取第一个有row属性的列的row值
243
+ const firstRowColumn = rowColumns[0]
244
+ const rowCount = firstRowColumn ? firstRowColumn.row : 1
245
+ for (let i = 0; i < rowCount; i++) {
246
+ processedData.push({ ...item, _rowIndex: i })
247
+ }
248
+ })
249
+ return processedData
250
+ },
251
+ getRowSpan (row, col) {
252
+ // 只在每组的第一个显示,其他返回0
253
+ if (!col.row) return 1
254
+ return row._rowIndex === 0 ? col.row : 0
255
+ },
256
+ handleInputChange (row, dataIndex, value) {
257
+ this.$set(row, dataIndex, value)
258
+ },
259
+ // 初始化周次日期
260
+ initWeekDates () {
261
+ const today = new Date()
262
+ const currentDay = today.getDay() || 7 // 将周日的0转换为7
263
+ const monday = new Date(today)
264
+ monday.setDate(today.getDate() - currentDay + 1) // 设置为本周一
265
+ this.currentWeekDates = Array.from({ length: 7 }, (_, index) => {
266
+ const date = new Date(monday)
267
+ date.setDate(monday.getDate() + index)
268
+ return date
269
+ })
270
+ },
271
+ // 切换到上一周
272
+ handleLastWeek () {
273
+ const monday = new Date(this.currentWeekDates[0])
274
+ monday.setDate(monday.getDate() - 7)
275
+ this.updateWeekDates(monday)
276
+ },
277
+ // 切换到下一周
278
+ handleNextWeek () {
279
+ const monday = new Date(this.currentWeekDates[0])
280
+ monday.setDate(monday.getDate() + 7)
281
+ this.updateWeekDates(monday)
282
+ },
283
+ // 更新周次日期
284
+ updateWeekDates (monday) {
285
+ this.currentWeekDates = Array.from({ length: 7 }, (_, index) => {
286
+ const date = new Date(monday)
287
+ date.setDate(monday.getDate() + index)
288
+ return date
289
+ })
290
+ }
291
+ },
292
+ watch: {
293
+ queryParamsName: {
294
+ handler (newValue) {
295
+ this.init(newValue)
296
+ },
297
+ deep: true,
298
+ immediate: true
299
+ }
300
+ }
301
+ }
302
+ </script>
303
+
304
+ <style scoped>
305
+ .time-title {
306
+ display: flex !important;
307
+ flex-direction: column !important;
308
+ align-items: center !important;
309
+ }
310
+ .week_last_next_btn {
311
+ display: flex;
312
+ flex-direction: row;
313
+ align-items: center;
314
+ justify-content: center;
315
+ gap: 16px;
316
+ }
317
+ ::v-deep .ant-table-thead > tr > th,
318
+ ::v-deep .ant-table-tbody > tr > td {
319
+ padding: 8px 16px !important;
320
+ overflow-wrap: break-word;
321
+ }
322
+ .ant-input {
323
+ width: 100%;
324
+ }
325
+ .a-div{
326
+ display: flex;
327
+ flex-direction: column;
328
+ }
329
+ </style>
@@ -0,0 +1,330 @@
1
+ <template>
2
+ <div v-if="pattern == 'schedule'">
3
+ <a-table
4
+ :columns="columns"
5
+ :data-source="data"
6
+ :rowSelection="rowSelection"
7
+ :scroll="{ y: '70vh' }">
8
+ <span slot="time" class="time-title">
9
+ <span v-for="(item, index) in configData.timePeriod" :key="index">{{ item }}</span>
10
+ </span>
11
+ <div v-for="(item, index) in weekDays" :key="index" :slot="item.key" class="week_last_next_btn">
12
+ <a-button slot="lastWeek" icon="left" size="large" @click="handleLastWeek" v-if="item.title == '周一'" />
13
+ <div class="time-title">
14
+ <span>{{ item.title }}</span>
15
+ <span>{{ currentWeekDates[index].toLocaleDateString() }}</span>
16
+ </div>
17
+ <a-button slot="nextWeek" icon="right" size="large" @click="handleNextWeek" v-if="item.title == '周日'"/>
18
+ </div>
19
+ <template :slot="day.key" slot-scope="text, record" v-for="day in shiftTable">
20
+ <div class="time-title" :key="day.key">
21
+ <a-button v-for="(item, index) in record[day.key]" :key="index" @click="handleShiftChange(day.key, index, record)">{{ item === 1 || item === '1' ? '坐诊' : '休息' }}</a-button>
22
+ </div>
23
+ </template>
24
+ <template slot="sk_limit" slot-scope="text, record">
25
+ <a-input-number id="inputNumber" v-model="record.sk_limit" :min="configData.sk_limitMin" :max="configData.sk_limitMax" />
26
+ </template>
27
+ </a-table>
28
+ </div>
29
+ <div v-else-if="pattern == 'form'">
30
+ <a-table :columns="columns" :data-source="data" :row-selection="rowSelection" bordered>
31
+ <template v-for="col in columns" :slot="col.dataIndex" slot-scope="text, record">
32
+ <template v-if="col.type === 'input'">
33
+ <a-input
34
+ v-if="getRowSpan(record, col) !== 0"
35
+ :value="record[col.dataIndex]"
36
+ :placeholder="`请输入${col.title}`"
37
+ @input="val => handleInputChange(record, col.dataIndex, val)"
38
+ class="ant-input"
39
+ :key="record.key + '-' + col.dataIndex"
40
+ />
41
+ </template>
42
+ <template v-else-if="col.row">
43
+ <div v-if="getRowSpan(record, col) !== 0" :key="record.key + '-' + col.dataIndex">{{ text }}</div>
44
+ </template>
45
+ <template v-else>
46
+ {{ text }}
47
+ </template>
48
+ </template>
49
+ </a-table>
50
+ </div>
51
+ </template>
52
+ <script>
53
+ import { getConfigByName, runLogic } from '@vue2-client/services/api/common'
54
+
55
+ export default {
56
+ data () {
57
+ return {
58
+ // 模式
59
+ pattern: 'schedule',
60
+ data: [],
61
+ // 列配置
62
+ columns: [],
63
+ column: [
64
+ {
65
+ title: 'name',
66
+ dataIndex: 'name',
67
+ key: 'name',
68
+ slots: { title: 'customTitle' },
69
+ scopedSlots: { customRender: 'name' }
70
+ },
71
+ {
72
+ title: 'targetValue',
73
+ dataIndex: 'targetValue',
74
+ key: 'targetValue',
75
+ scopedSlots: { customRender: 'targetValue' }
76
+ },
77
+ {
78
+ title: 'Address',
79
+ dataIndex: 'address',
80
+ key: 'address',
81
+ scopedSlots: { customRender: 'name' }
82
+ },
83
+ {
84
+ title: 'Tags',
85
+ key: 'tags',
86
+ dataIndex: 'tags',
87
+ scopedSlots: { customRender: 'tags' },
88
+ },
89
+ {
90
+ title: 'Action',
91
+ key: 'action',
92
+ scopedSlots: { customRender: 'action' },
93
+ }
94
+ ],
95
+ // 列名
96
+ columnNames: [],
97
+ // 选中的行键值集合
98
+ selectedRows: [],
99
+ // 选中的行信息集合
100
+ selectedRowKeys: [],
101
+ // 原始数据备份
102
+ originalData: [],
103
+ // 配置参数
104
+ configData: {},
105
+ // 当前显示的周次日期
106
+ currentWeekDates: [],
107
+ weekDays: [...['周一', '周二', '周三', '周四', '周五', '周六', '周日'].map((title, index) => {
108
+ const key = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'][index]
109
+ return { title, key }
110
+ })],
111
+ // 排班时间表
112
+ shiftTable: [...['周一', '周二', '周三', '周四', '周五', '周六', '周日'].map((title, index) => {
113
+ const key = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'][index]
114
+ return {
115
+ key, dataIndex: key, scopedSlots: { customRender: key }, slots: { title: key }, align: 'center', width: key === 'Monday' || key === 'Sunday' ? 170 : 120
116
+ }
117
+ }),
118
+ {
119
+ title: '排班数',
120
+ key: 'sk_limit',
121
+ dataIndex: 'sk_limit',
122
+ scopedSlots: { customRender: 'sk_limit' },
123
+ align: 'center'
124
+ }
125
+ ]
126
+ }
127
+ },
128
+ props: {
129
+ // 配置名
130
+ queryParamsName: {
131
+ type: String,
132
+ default: ''
133
+ },
134
+ // 服务名
135
+ serviceName: {
136
+ type: String,
137
+ default: 'af-his'
138
+ }
139
+ },
140
+ computed: {
141
+ rowSelection () {
142
+ return {
143
+ selectedRowKeys: this.selectedRowKeys,
144
+ onChange: (selectedRowKeys, selectedRows) => {
145
+ this.onSelectChange(selectedRowKeys, selectedRows)
146
+ }
147
+ }
148
+ }
149
+ },
150
+ mounted () {
151
+ this.initWeekDates()
152
+ },
153
+ methods: {
154
+ handleShiftChange (day, index, record) {
155
+ // 找到当前记录在data中的索引
156
+ const dataIndex = this.data.findIndex(item => item.id === record.id)
157
+ if (dataIndex === -1) return
158
+ // 获取当前状态
159
+ const currentValue = record[day][index]
160
+ const newValue = currentValue === 1 || currentValue === '1' ? 0 : 1
161
+ // 更新按钮显示
162
+ this.$set(record[day], index, newValue)
163
+ // 同步更新data中的数据
164
+ this.$set(this.data[dataIndex][day], index, newValue)
165
+ },
166
+ onSelectChange (selectedRowKeys, selectedRows) {
167
+ this.selectedRowKeys = selectedRowKeys
168
+ this.selectedRows = selectedRows
169
+ },
170
+ // 获取选中的行数据
171
+ getSelectedRowData () {
172
+ return this.selectedRows
173
+ },
174
+ // 获取全部数据
175
+ getAllTable () {
176
+ return this.data
177
+ },
178
+ // 初始化数据
179
+ async init (queryParamsName) {
180
+ getConfigByName(queryParamsName, this.serviceName, result => {
181
+ this.configData = result
182
+ runLogic(result.dataSource, {}, this.serviceName).then(res => {
183
+ this.columns = []
184
+ this.columns = JSON.parse(JSON.stringify(this.configData.columns))
185
+ this.pattern = result.pattern
186
+ if (this.pattern == 'schedule') {
187
+ for (let i = 0; i < this.shiftTable.length; i++) {
188
+ this.columns.push(this.shiftTable[i])
189
+ }
190
+ if (res && Array.isArray(res)) {
191
+ const weekDays = ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']
192
+ const shifts = ['am', 'pm', 'evening']
193
+ let key = 0
194
+ this.data = res.map(item => {
195
+ const scheduleData = {
196
+ key: key++
197
+ }
198
+ this.configData.columnsName.forEach(columnName => { scheduleData[columnName] = item[columnName] })
199
+ weekDays.forEach(day => {
200
+ scheduleData[day.charAt(0).toUpperCase() + day.slice(1)] = shifts.map(shift => item[`f_${day}_${shift}`] === '1' ? 1 : 0)
201
+ })
202
+ return scheduleData
203
+ })
204
+ // 保存原始数据
205
+ this.originalData = JSON.parse(JSON.stringify(this.data))
206
+ }
207
+ } else if (this.pattern == 'form') {
208
+ console.log(res)
209
+ this.data = this.processFormData(res)
210
+ }
211
+ })
212
+ })
213
+ },
214
+ // 查询数据函数
215
+ filterTableData (filters) {
216
+ if (!filters || Object.keys(filters).length === 0) {
217
+ // 如果没有过滤条件,恢复原始数据
218
+ this.data = JSON.parse(JSON.stringify(this.originalData))
219
+ return
220
+ }
221
+ // 从原始数据开始过滤
222
+ this.data = this.originalData.filter(item => {
223
+ // 检查每一项是否满足所有过滤条件
224
+ return Object.entries(filters).every(([key, value]) => {
225
+ // 如果过滤值是字符串,进行模糊匹配
226
+ if (typeof value === 'string') {
227
+ return item[key] && item[key].toString().toLowerCase().includes(value.toLowerCase())
228
+ }
229
+ // 如果过滤值是数字,进行精确匹配
230
+ return item[key] === value
231
+ })
232
+ })
233
+ },
234
+ // form模式:行复制和rowSpan处理
235
+ processFormData (originalData) {
236
+ if (!originalData || !Array.isArray(originalData)) return []
237
+ // 查找有row属性的列
238
+ const rowColumns = this.columns.filter(col => col.row && col.row > 1)
239
+ if (rowColumns.length === 0) return originalData
240
+ // 复制行
241
+ const processedData = []
242
+ originalData.forEach((item, originalIndex) => {
243
+ // 取第一个有row属性的列的row值
244
+ const firstRowColumn = rowColumns[0]
245
+ const rowCount = firstRowColumn ? firstRowColumn.row : 1
246
+ for (let i = 0; i < rowCount; i++) {
247
+ processedData.push({ ...item, _rowIndex: i })
248
+ }
249
+ })
250
+ return processedData
251
+ },
252
+ getRowSpan (row, col) {
253
+ // 只在每组的第一个显示,其他返回0
254
+ if (!col.row) return 1
255
+ return row._rowIndex === 0 ? col.row : 0
256
+ },
257
+ handleInputChange (row, dataIndex, value) {
258
+ this.$set(row, dataIndex, value)
259
+ },
260
+ // 初始化周次日期
261
+ initWeekDates () {
262
+ const today = new Date()
263
+ const currentDay = today.getDay() || 7 // 将周日的0转换为7
264
+ const monday = new Date(today)
265
+ monday.setDate(today.getDate() - currentDay + 1) // 设置为本周一
266
+ this.currentWeekDates = Array.from({ length: 7 }, (_, index) => {
267
+ const date = new Date(monday)
268
+ date.setDate(monday.getDate() + index)
269
+ return date
270
+ })
271
+ },
272
+ // 切换到上一周
273
+ handleLastWeek () {
274
+ const monday = new Date(this.currentWeekDates[0])
275
+ monday.setDate(monday.getDate() - 7)
276
+ this.updateWeekDates(monday)
277
+ },
278
+ // 切换到下一周
279
+ handleNextWeek () {
280
+ const monday = new Date(this.currentWeekDates[0])
281
+ monday.setDate(monday.getDate() + 7)
282
+ this.updateWeekDates(monday)
283
+ },
284
+ // 更新周次日期
285
+ updateWeekDates (monday) {
286
+ this.currentWeekDates = Array.from({ length: 7 }, (_, index) => {
287
+ const date = new Date(monday)
288
+ date.setDate(monday.getDate() + index)
289
+ return date
290
+ })
291
+ }
292
+ },
293
+ watch: {
294
+ queryParamsName: {
295
+ handler (newValue) {
296
+ this.init(newValue)
297
+ },
298
+ deep: true,
299
+ immediate: true
300
+ }
301
+ }
302
+ }
303
+ </script>
304
+
305
+ <style scoped>
306
+ .time-title {
307
+ display: flex !important;
308
+ flex-direction: column !important;
309
+ align-items: center !important;
310
+ }
311
+ .week_last_next_btn {
312
+ display: flex;
313
+ flex-direction: row;
314
+ align-items: center;
315
+ justify-content: center;
316
+ gap: 16px;
317
+ }
318
+ ::v-deep .ant-table-thead > tr > th,
319
+ ::v-deep .ant-table-tbody > tr > td {
320
+ padding: 8px 16px !important;
321
+ overflow-wrap: break-word;
322
+ }
323
+ .ant-input {
324
+ width: 100%;
325
+ }
326
+ .a-div{
327
+ display: flex;
328
+ flex-direction: column;
329
+ }
330
+ </style>