bindModal.vue 7.5 KB

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