bindModal.vue 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. <template>
  2. <BasicModal
  3. v-bind="$attrs"
  4. @register="register"
  5. :title="t('routes.scenes.bindAnchor')"
  6. width="800px"
  7. @ok="handleSubmit"
  8. @cancel="clearSelectedRowKeys"
  9. >
  10. <div class="pt-2px pr-3px">
  11. <BasicTable
  12. @register="registerTable"
  13. :searchInfo="searchInfo"
  14. :rowSelection="{ type: 'checkbox', onChange: handleSelect }"
  15. >
  16. <template #headerTop>
  17. <div class="pt-4 pb-4">
  18. {{ t('routes.scenes.sceneName') }}: {{ headerInfo?.sceneName }}
  19. {{ t('routes.scenes.anchorRoom') }}:{{ headerInfo?.name }}</div
  20. >
  21. </template>
  22. <template #canShowSwitch="{ record }">
  23. <div>
  24. <Switch
  25. :disabled="!SelectRowsList.includes(record.id)"
  26. v-model:checked="record.canShow"
  27. :checkedChildren="t('layout.setting.on')"
  28. :unCheckedChildren="t('layout.setting.off')"
  29. />
  30. </div>
  31. </template>
  32. </BasicTable>
  33. <!-- <BasicForm @register="registerForm" :model="model" /> -->
  34. </div>
  35. <template #centerFooter>
  36. <!-- <a-button>xxxx</a-button> -->
  37. </template>
  38. </BasicModal>
  39. </template>
  40. <script lang="ts">
  41. import { defineComponent, reactive, h, ref, computed } from 'vue';
  42. import { Switch } from 'ant-design-vue';
  43. import { BasicModal, useModalInner } from '/@/components/Modal';
  44. // import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
  45. import { BasicTable, useTable, BasicColumn, FormSchema } from '/@/components/Table';
  46. import { useMessage } from '/@/hooks/web/useMessage';
  47. // import { checkUserAddAble } from '/@/api/corporation/modal';
  48. import { useI18n } from '/@/hooks/web/useI18n';
  49. // bindAnchorListApi
  50. import { bindOldAnchorListApi, bindUserApi } from '/@/api/scene/live';
  51. import { bindAnchorListParam } from '/@/api/scene/model';
  52. import { Time } from '/@/components/Time';
  53. // import { useUserStore } from '/@/store/modules/user';
  54. const { t } = useI18n();
  55. const { createMessage } = useMessage();
  56. const schemas: FormSchema[] = [
  57. {
  58. field: 'own',
  59. label: t('routes.scenes.own'),
  60. component: 'Input',
  61. },
  62. ];
  63. const columns: BasicColumn[] = [
  64. {
  65. title: 'ID',
  66. dataIndex: 'id',
  67. fixed: 'left',
  68. width: 40,
  69. },
  70. {
  71. title: t('routes.scenes.userName'),
  72. dataIndex: 'userName',
  73. width: 100,
  74. },
  75. {
  76. title: t('common.roleName'),
  77. dataIndex: 'roleName',
  78. width: 100,
  79. },
  80. {
  81. title: t('common.mobile'),
  82. dataIndex: 'phone',
  83. width: 100,
  84. },
  85. {
  86. title: t('routes.scenes.canShow'),
  87. dataIndex: 'canShow',
  88. slots: { customRender: 'canShowSwitch' },
  89. width: 140,
  90. },
  91. {
  92. title: t('routes.scenes.bindTime'),
  93. dataIndex: 'createTime',
  94. width: 100,
  95. customRender: ({ record }) => {
  96. return (
  97. record.createTime &&
  98. h(Time, {
  99. value: record.createTime,
  100. mode: 'datetime',
  101. })
  102. );
  103. },
  104. },
  105. ];
  106. export default defineComponent({
  107. components: { BasicModal, BasicTable, Switch },
  108. props: {
  109. userData: { type: Object },
  110. },
  111. emits: ['register', 'success'],
  112. setup(_, { emit }) {
  113. const [register, { closeModal }] = useModalInner((data) => {
  114. data && onDataReceive(data);
  115. });
  116. const SelectRowsList = computed(() => {
  117. const data = getSelectRowKeys();
  118. return data;
  119. });
  120. const mapCheckedValue = computed(() => (key) => {
  121. return key === 1 ? true : false;
  122. });
  123. const checked = ref<boolean>(false);
  124. const headerInfo = reactive<Recordable>({});
  125. const searchInfo = reactive<Recordable>({});
  126. const [
  127. registerTable,
  128. {
  129. reload,
  130. getSelectRows,
  131. getSelectRowKeys,
  132. clearSelectedRowKeys,
  133. setSelectedRowKeys,
  134. getRawDataSource,
  135. },
  136. ] = useTable({
  137. title: t('routes.scenes.anchorList'),
  138. api: bindOldAnchorListApi,
  139. columns: columns,
  140. useSearchForm: false,
  141. // formConfig: searchForm,
  142. showTableSetting: false,
  143. tableSetting: { fullScreen: true },
  144. showIndexColumn: false,
  145. immediate: false,
  146. rowKey: 'id',
  147. pagination: false,
  148. clickToRowSelect: false,
  149. bordered: true,
  150. afterFetch: (data) => {
  151. console.log('data', data);
  152. const res = data.map((i) => {
  153. i.canShow = i.canShow === 1 ? true : false;
  154. return i;
  155. });
  156. console.log('res', res);
  157. const bindIds = data
  158. .filter((i) => i.isBind === 1)
  159. .reduce((pre, current) => {
  160. return pre.concat(current['id']);
  161. }, []);
  162. console.log('bindIds', bindIds);
  163. data.map((i) => {
  164. i.canShow === 1 ? true : false;
  165. return i;
  166. });
  167. setSelectedRowKeys(bindIds);
  168. },
  169. });
  170. function onDataReceive(data) {
  171. console.log('Data Received', data.id);
  172. searchInfo.brandId = data.id;
  173. headerInfo.name = data.name;
  174. headerInfo.sceneName = data.sceneName;
  175. searchInfo.limit = 1000;
  176. searchInfo.page = 1;
  177. reload();
  178. // const rawData = getRawDataSource();
  179. // if (rawData.list.re) {
  180. // console.log('存在已邦,选择');
  181. // setSelectedRowKeys([Number(data.bindShowerId)]);
  182. // }
  183. }
  184. const handleSubmit = async () => {
  185. try {
  186. const rows = getSelectRows();
  187. const rawData = getRawDataSource();
  188. let paramsRow: bindAnchorListParam[];
  189. console.log('rows', rows);
  190. if (rows?.length > 0) {
  191. paramsRow = rows.map((row) => {
  192. return {
  193. brandId: String(searchInfo.brandId),
  194. canShow: row.canShow ? 1 : 0,
  195. type: 1,
  196. userId: String(row.id),
  197. } as bindAnchorListParam;
  198. });
  199. await bindUserApi(paramsRow);
  200. createMessage.success(t('common.optSuccess'));
  201. } else {
  202. const unBindUser = rawData.list
  203. .filter((i) => i.isBind === 1)
  204. .map((item) => {
  205. let param: bindAnchorListParam = {};
  206. param.canShow = item.canShow ? 1 : 0;
  207. param.type = -1;
  208. param.brandId = searchInfo.brandId;
  209. param.userId = String(item.id);
  210. return param;
  211. });
  212. console.log('unBindUser', unBindUser);
  213. await bindUserApi(unBindUser);
  214. createMessage.success(t('common.optSuccess'));
  215. }
  216. closeModal();
  217. emit('success');
  218. clearSelectedRowKeys();
  219. } catch (error) {
  220. console.log('error', error);
  221. }
  222. };
  223. const handleSelect = async () => {
  224. // const keys = getSelectRowKeys();
  225. // console.log('key', key);
  226. };
  227. const handleChange = (val, row) => {
  228. console.log('val,row', val, row);
  229. // updateTableDataRecord('canShow', values);
  230. // updateTableDataRecord
  231. };
  232. return {
  233. register,
  234. schemas,
  235. registerTable,
  236. handleSubmit,
  237. searchInfo,
  238. closeModal,
  239. handleSelect,
  240. headerInfo,
  241. clearSelectedRowKeys,
  242. handleChange,
  243. t,
  244. checked,
  245. SelectRowsList,
  246. mapCheckedValue,
  247. };
  248. },
  249. });
  250. </script>