WorkFacePointTable copy.vue 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. <template>
  2. <div class="p-4">
  3. <div class="btm-group vent-flex-row-between">
  4. <div>
  5. <label style="color: #fff">设备类型:</label>
  6. <ApiTreeSelect
  7. @change="handleChange"
  8. :api="deviceList.bind(null, { devicetype: '' })"
  9. :fieldNames="{ children: 'children', label: 'itemText', value: 'itemValue' }"
  10. v-model:value="deviceKind"
  11. style="width: 200px"
  12. />
  13. <a-button type="primary" @click="addRow"> 新增 </a-button>
  14. </div>
  15. <div>
  16. <a-button type="primary" @click="handleSave"> 保存 </a-button>
  17. </div>
  18. </div>
  19. <BasicTable @register="registerTable" :dataSource="dataSource" :columns="workFaceColumns" @edit-change="onEditChange">
  20. <template #action="{ record, column }">
  21. <TableAction :actions="createActions(record, column)" />
  22. </template>
  23. </BasicTable>
  24. <DeviceModalTable
  25. @register="registerModal"
  26. :deviceType="deviceKind"
  27. :deviceID="deviceId"
  28. @reload="getWorkFaceList"
  29. :selectionRowKeys="selectionRowKeys"
  30. />
  31. </div>
  32. </template>
  33. <script lang="ts">
  34. import { defineComponent, ref, nextTick, inject, onMounted } from 'vue';
  35. import { BasicTable, useTable, TableAction, BasicColumn, ActionItem, EditRecordRow } from '/@/components/Table';
  36. import { useModal } from '/@/components/Modal';
  37. import { ApiTreeSelect } from '/@/components/Form';
  38. import DeviceModalTable from './DeviceModalTable.vue';
  39. import { deviceId, workDeviceList, deviceList, list, edit } from './point.api';
  40. import { workFaceColumns, deviceColumns } from './point.data';
  41. export default defineComponent({
  42. components: { BasicTable, TableAction, DeviceModalTable, ApiTreeSelect },
  43. props: {
  44. columns: {
  45. type: Array,
  46. requried: true,
  47. },
  48. deviceId: {
  49. type: String || Number,
  50. requried: true,
  51. },
  52. list: {
  53. type: Function,
  54. requried: true,
  55. },
  56. isAdd: {
  57. type: Boolean,
  58. },
  59. },
  60. emits: ['save', 'delete'],
  61. setup(props, { emit }) {
  62. const activeTab = ref('1');
  63. const deviceKind = ref('');
  64. const type = inject('deviceType') || '';
  65. const currentEditKeyRef = ref('');
  66. const options = ref([]);
  67. const dataSource = ref<any>([]);
  68. const selectionRowKeys = ref<any[]>([]);
  69. const [registerModal, { openModal }] = useModal();
  70. const [registerTable, { insertTableDataRecord, reload }] = useTable({
  71. title: '',
  72. showIndexColumn: true,
  73. showTableSetting: false,
  74. tableSetting: { fullScreen: true },
  75. actionColumn: {
  76. width: 160,
  77. title: '操作',
  78. dataIndex: 'action',
  79. slots: { customRender: 'action' },
  80. },
  81. });
  82. function addRow() {
  83. openModal();
  84. }
  85. function handleEdit(record: EditRecordRow) {
  86. currentEditKeyRef.value = record.key;
  87. record.onEdit?.(true);
  88. }
  89. function handleCancel(record: EditRecordRow) {
  90. currentEditKeyRef.value = '';
  91. record.onEdit?.(false, false);
  92. }
  93. function handleDelete(record: EditRecordRow) {
  94. emit('delete', record.id, reload);
  95. }
  96. async function getOptions() {
  97. const res = await deviceList({ devicetype: '' });
  98. options.value = res;
  99. deviceKind.value = options.value[0]['itemValue'];
  100. getWorkFaceList();
  101. }
  102. function getWorkFaceList() {
  103. workDeviceList({ deviceKind: deviceKind.value, sysId: props.deviceId }).then((res) => {
  104. dataSource.value = res['records'];
  105. selectionRowKeys.value = dataSource.value.map((item) => item.deviceId) || [];
  106. });
  107. }
  108. function handleChange(id) {
  109. deviceKind.value = id;
  110. getWorkFaceList();
  111. }
  112. async function handleSave(record: EditRecordRow) {
  113. dataSource.value.filter((item) => {
  114. if (record.id && record.id === item.id) {
  115. Object.assign(item, record.editValueRefs);
  116. }
  117. });
  118. console.log('[ dataSource ] >', dataSource.value, record);
  119. // 校验
  120. await edit(dataSource.value);
  121. record.editable = false;
  122. }
  123. function createActions(record: EditRecordRow, column: BasicColumn): ActionItem[] {
  124. if (!record.editable) {
  125. if (props.isAdd) {
  126. return [
  127. {
  128. label: '编辑',
  129. disabled: currentEditKeyRef.value ? currentEditKeyRef.value !== record.key : false,
  130. onClick: handleEdit.bind(null, record),
  131. },
  132. {
  133. label: '删除',
  134. disabled: currentEditKeyRef.value ? currentEditKeyRef.value !== record.key : false,
  135. onClick: handleDelete.bind(null, record),
  136. },
  137. ];
  138. } else {
  139. return [
  140. {
  141. label: '编辑',
  142. disabled: currentEditKeyRef.value ? currentEditKeyRef.value !== record.key : false,
  143. onClick: handleEdit.bind(null, record),
  144. },
  145. ];
  146. }
  147. }
  148. return [
  149. {
  150. label: '保存',
  151. onClick: handleSave.bind(null, record, column),
  152. },
  153. {
  154. label: '取消',
  155. popConfirm: {
  156. title: '是否取消编辑',
  157. confirm: handleCancel.bind(null, record, column),
  158. },
  159. },
  160. ];
  161. }
  162. function onEditChange({ column, value, record }) {
  163. // 本例
  164. if (column.dataIndex === 'devicetype') {
  165. // record.editValueRefs.name4.value = `${value}`;
  166. }
  167. // console.log(column, value, record);
  168. }
  169. onMounted(async () => {
  170. await getOptions();
  171. getWorkFaceList();
  172. });
  173. return {
  174. activeTab,
  175. registerTable,
  176. handleEdit,
  177. createActions,
  178. onEditChange,
  179. addRow,
  180. workFaceColumns,
  181. deviceColumns,
  182. getOptions,
  183. options,
  184. deviceList,
  185. dataSource,
  186. deviceKind,
  187. handleChange,
  188. registerModal,
  189. handleSave,
  190. selectionRowKeys,
  191. getWorkFaceList,
  192. // handleChangeDeviceType,
  193. // handleChangeLinkCode,
  194. // monitorParamsOptions,
  195. };
  196. },
  197. });
  198. </script>
  199. <style scoped lang="less">
  200. :deep(.ant-table-body) {
  201. height: auto !important;
  202. }
  203. .btm-group {
  204. padding-bottom: 2px;
  205. }
  206. </style>