SubaccountModal.vue 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. <template>
  2. <BasicModal
  3. v-bind="$attrs"
  4. @register="register"
  5. :title="t('routes.devices.title')"
  6. @ok="saveTable"
  7. width="600px"
  8. @visible-change="handleVisibleChange"
  9. >
  10. <div class="pt-3px pr-3px">
  11. <BasicForm @register="registerForm">
  12. <template #userName="{ model, field }">
  13. {{ model[field] }}
  14. </template>
  15. <template #name="{ model, field }">
  16. {{ model[field] }}
  17. </template>
  18. <template #addeduser="{ model, field }">
  19. {{ model[field] || 0 }}
  20. <a-button
  21. :disabled="model.subNum == 0"
  22. @click="openTargetModal()"
  23. type="primary"
  24. preIcon="ic:outline-person-add"
  25. >
  26. {{ t('routes.devices.add') }}{{ t('routes.devices.title') }}
  27. </a-button>
  28. </template>
  29. </BasicForm>
  30. <div class="table_list">
  31. <BasicTable
  32. @register="registerSubtable"
  33. :beforeEditSubmit="beforeEditSubmit"
  34. :searchInfo="searchInfo"
  35. >
  36. <template #action="{ record }">
  37. <TableAction
  38. :actions="[
  39. // {
  40. // label: '编辑',
  41. // icon: 'mdi:account-edit-outline',
  42. // onClick: handleDelete.bind(null, record, 'edit'),
  43. // },
  44. {
  45. label: t('common.unbind'),
  46. icon: 'mdi:account-multiple-remove-outline',
  47. onClick: handleDelete.bind(null, record, 'unbond'),
  48. },
  49. ]"
  50. />
  51. </template>
  52. </BasicTable>
  53. <AddModal @tablelist="getTableList" @register="registerModal" @submit="handleAddUser" />
  54. </div>
  55. </div>
  56. <EditModal @register="registerEdit" />
  57. </BasicModal>
  58. </template>
  59. <script lang="ts">
  60. import { defineComponent, reactive, nextTick, unref } from 'vue';
  61. import { BasicModal, useModalInner, useModal } from '/@/components/Modal';
  62. import { BasicTable, useTable, BasicColumn, TableAction } from '/@/components/Table';
  63. import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
  64. import { selectUserList, saveSubUsers } from '/@/api/corporation/modal';
  65. import { useMessage } from '/@/hooks/web/useMessage';
  66. import EditModal from './EditModal.vue';
  67. // import { tableState } from './types/hooks';
  68. import AddModal from './AddModal.vue';
  69. import { useI18n } from '/@/hooks/web/useI18n';
  70. export default defineComponent({
  71. components: { BasicModal, BasicForm, BasicTable, AddModal, TableAction, EditModal },
  72. props: {
  73. userData: { type: Object },
  74. },
  75. emits: ['addtable', 'register', 'update'],
  76. setup(props, { emit }) {
  77. const { t } = useI18n();
  78. const { createConfirm, createMessage } = useMessage();
  79. const [registerModal, { openModal: addopenModal }] = useModal();
  80. const modelRef = reactive({
  81. id: 0,
  82. subNum: 0,
  83. });
  84. const searchInfo = reactive({
  85. limit: 9999,
  86. id: 0,
  87. page: 1,
  88. });
  89. const columns: BasicColumn[] = [
  90. {
  91. title: t('common.fullName'),
  92. dataIndex: 'nickName',
  93. edit: true,
  94. editRule: true,
  95. width: 200,
  96. },
  97. {
  98. title: t('common.mobile'),
  99. edit: true,
  100. editRule: true,
  101. width: 200,
  102. dataIndex: 'userName',
  103. },
  104. {
  105. title: t('common.operating'),
  106. dataIndex: '',
  107. slots: { customRender: 'action' },
  108. width: 100,
  109. },
  110. ];
  111. const schemas: FormSchema[] = [
  112. {
  113. field: 'userName',
  114. component: 'Input',
  115. label: `${t('routes.corporation.enterpriseId')} :`,
  116. slot: 'userName',
  117. labelWidth: 200,
  118. },
  119. {
  120. field: 'name',
  121. label: `${t('routes.corporation.enterpriseName')} :`,
  122. slot: 'name',
  123. component: 'Input',
  124. labelWidth: 200,
  125. },
  126. {
  127. field: 'totalSubNum',
  128. component: 'InputNumber',
  129. label: `${t('routes.devices.subNum')} :`,
  130. labelWidth: 200,
  131. componentProps: () => {
  132. return {
  133. // xxxx props schema, tableAction, formModel checkDevice
  134. min: 0,
  135. onChange: numOnChange,
  136. };
  137. },
  138. },
  139. {
  140. field: 'addeduser',
  141. label: `${t('routes.devices.addeduser')}`,
  142. labelWidth: 200,
  143. slot: 'addeduser',
  144. component: 'Input',
  145. },
  146. ];
  147. const [
  148. registerForm,
  149. {
  150. setFieldsValue,
  151. resetFields,
  152. getFieldsValue,
  153. // setProps,
  154. },
  155. ] = useForm({
  156. labelWidth: 120,
  157. schemas,
  158. showActionButtonGroup: false,
  159. actionColOptions: {
  160. span: 24,
  161. },
  162. });
  163. const [
  164. registerSubtable,
  165. {
  166. reload: reloadSubtable,
  167. updateTableDataRecord,
  168. deleteTableDataRecord,
  169. getDataSource,
  170. insertTableDataRecord,
  171. },
  172. ] = useTable({
  173. title: `${t('routes.devices.listTile')}`,
  174. rowKey: 'phone',
  175. api: selectUserList,
  176. immediate: false,
  177. columns: columns,
  178. showIndexColumn: false,
  179. bordered: true,
  180. pagination: false,
  181. });
  182. const [registerEdit, { openModal: EditModal }] = useModal();
  183. const [register, { closeModal }] = useModalInner((data) => {
  184. data && onDataReceive(data);
  185. });
  186. async function onDataReceive(data) {
  187. console.log('Data Received', data.record);
  188. // 方式1;
  189. const { id, subNum } = data.record;
  190. resetFields();
  191. setFieldsValue({
  192. ...data.record,
  193. });
  194. modelRef.id = id;
  195. modelRef.subNum = subNum;
  196. searchInfo.id = id;
  197. await reloadSubtable();
  198. const total = getDataSource();
  199. console.log('total', total);
  200. setFieldsValue({
  201. addeduser: total?.length || 0,
  202. });
  203. }
  204. function numOnChange(data) {
  205. console.log('data', data);
  206. modelRef.subNum = data;
  207. // myData.subNum = event;
  208. // console.log('numOnChange', event);
  209. }
  210. async function handleDelete(item, type) {
  211. console.log('handleDelete', item, type);
  212. if (type == 'edit') {
  213. //编辑
  214. const { memoName, phone } = item;
  215. EditModal(true, {
  216. memoName,
  217. phone,
  218. });
  219. } else {
  220. //解除
  221. createConfirm({
  222. iconType: 'warning',
  223. title: '提示',
  224. content: t('routes.devices.unbindWarning'),
  225. onOk: async () => {
  226. // tableRef.value.deleteTableDataRecord(item.id);
  227. deleteTableDataRecord(item.userName);
  228. },
  229. });
  230. }
  231. }
  232. async function beforeEditSubmit({ record, _, key, value }) {
  233. updateTableDataRecord(record.userName, { ...record, [key]: value });
  234. }
  235. function handleVisibleChange(v) {
  236. v && props.userData && nextTick(() => onDataReceive(props.userData));
  237. }
  238. function openTargetModal() {
  239. console.log('openTargetModal');
  240. addopenModal(true);
  241. }
  242. async function saveTable() {
  243. // let tableData = tableRef.value.getDataSource() || [];
  244. let tableData = getDataSource();
  245. let res = await saveSubUsers({
  246. id: modelRef.id,
  247. subNum: modelRef.subNum,
  248. subUsers: tableData,
  249. });
  250. console.log('saveTable', res);
  251. createMessage.success(t('common.optSuccess'));
  252. // reload();
  253. emit('update');
  254. closeModal();
  255. }
  256. function addTabledata(val) {
  257. console.log('addTabledata', val);
  258. }
  259. function getTableList(callback) {
  260. let data = getFieldsValue();
  261. let tableList = unref(getDataSource());
  262. setFieldsValue({
  263. subNum: Number(data.subNum) - 1,
  264. });
  265. callback(tableList);
  266. }
  267. function handleAddUser(newUser) {
  268. insertTableDataRecord({
  269. nickName: newUser.memoName,
  270. userName: newUser.phone,
  271. });
  272. }
  273. return {
  274. register,
  275. handleDelete,
  276. registerEdit,
  277. numOnChange,
  278. modelRef,
  279. schemas,
  280. columns,
  281. registerForm,
  282. handleVisibleChange,
  283. beforeEditSubmit,
  284. registerModal,
  285. openTargetModal,
  286. addopenModal,
  287. saveTable,
  288. closeModal,
  289. addTabledata,
  290. t,
  291. registerSubtable,
  292. reloadSubtable,
  293. searchInfo,
  294. handleAddUser,
  295. getTableList,
  296. };
  297. },
  298. });
  299. </script>