bindModal.vue 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  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, 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. ellipsis: true,
  69. fixed: 'left',
  70. width: 130,
  71. },
  72. {
  73. title: t('routes.scenes.userName'),
  74. dataIndex: 'nickName',
  75. width: 100,
  76. },
  77. {
  78. title: t('common.roleName'),
  79. dataIndex: 'roleName',
  80. width: 100,
  81. },
  82. {
  83. title: t('common.mobile'),
  84. dataIndex: 'phone',
  85. width: 100,
  86. },
  87. {
  88. title: t('routes.scenes.canShow'),
  89. dataIndex: 'canShow',
  90. slots: { customRender: 'canShowSwitch' },
  91. width: 140,
  92. },
  93. // {
  94. // title: t('routes.scenes.bindTime'),
  95. // dataIndex: 'createTime',
  96. // width: 100,
  97. // customRender: ({ record }) => {
  98. // return (
  99. // record.createTime &&
  100. // h(Time, {
  101. // value: record.createTime,
  102. // mode: 'datetime',
  103. // })
  104. // );
  105. // },
  106. // },
  107. ];
  108. export default defineComponent({
  109. components: { BasicModal, BasicTable, Switch },
  110. props: {
  111. userData: { type: Object },
  112. },
  113. emits: ['register', 'success'],
  114. setup(_, { emit }) {
  115. const [register, { closeModal }] = useModalInner((data) => {
  116. data && onDataReceive(data);
  117. });
  118. const SelectRowsList = computed(() => {
  119. const data = getSelectRowKeys();
  120. return data;
  121. });
  122. const mapCheckedValue = computed(() => (key) => {
  123. return key === 1 ? true : false;
  124. });
  125. const checked = ref<boolean>(false);
  126. const checkedObj = ref({});
  127. const headerInfo = reactive<Recordable>({});
  128. const searchInfo = reactive<Recordable>({});
  129. const [
  130. registerTable,
  131. {
  132. reload,
  133. getSelectRows,
  134. getSelectRowKeys,
  135. clearSelectedRowKeys,
  136. setSelectedRowKeys,
  137. // getRawDataSource,
  138. },
  139. ] = useTable({
  140. title: t('routes.scenes.anchorList'),
  141. api: bindOldAnchorListApi,
  142. columns: columns,
  143. useSearchForm: false,
  144. // formConfig: searchForm,
  145. showTableSetting: false,
  146. maxHeight: 600,
  147. tableSetting: { fullScreen: true },
  148. showIndexColumn: false,
  149. // immediate: true,
  150. // isCanResizeParent: true,
  151. rowKey: 'id',
  152. pagination: false,
  153. clickToRowSelect: false,
  154. bordered: true,
  155. afterFetch: (data) => {
  156. let bindIds = [];
  157. data.map((i) => {
  158. i.canShow = i.canShow == 1 ? true : false;
  159. checkedObj.value[i.id] = i.canShow;
  160. if (i.isBind === 1) {
  161. bindIds.push(i.id);
  162. }
  163. return i;
  164. });
  165. setSelectedRowKeys(bindIds);
  166. },
  167. });
  168. function onDataReceive(data) {
  169. console.log('Data Received', data.id);
  170. searchInfo.brandId = data.id;
  171. headerInfo.name = data.name;
  172. headerInfo.sceneName = data.sceneName;
  173. searchInfo.limit = 1000;
  174. searchInfo.page = 1;
  175. reload();
  176. // const rawData = getRawDataSource();
  177. // if (rawData.list.re) {
  178. // console.log('存在已邦,选择');
  179. // setSelectedRowKeys([Number(data.bindShowerId)]);
  180. // }
  181. }
  182. const handleSubmit = async () => {
  183. try {
  184. const rows = getSelectRows();
  185. // const rawData = getRawDataSource();
  186. let paramsRow: bindAnchorListParam[];
  187. console.log('rawData', 'rows', rows, checkedObj.value);
  188. // if (rows?.length > 0) {
  189. // paramsRow = rows.map((row) => {
  190. // return {
  191. // brandId: String(searchInfo.brandId),
  192. // canShow: row.canShow ? 1 : 0,
  193. // type: 1,
  194. // userId: String(row.id),
  195. // } as bindAnchorListParam;
  196. // });
  197. // await bindUserApi(paramsRow);
  198. // createMessage.success(t('common.optSuccess'));
  199. // } else {
  200. paramsRow = rows.map((item) => {
  201. let param: bindAnchorListParam = {};
  202. param.canShow = checkedObj.value[item.id] ? 1 : 0;
  203. param.type = 1;
  204. param.brandId = searchInfo.brandId;
  205. param.userId = String(item.id);
  206. return param;
  207. });
  208. console.log('paramsRow', paramsRow);
  209. await bindUserApi({
  210. brandList: paramsRow,
  211. brandId: searchInfo.brandId,
  212. });
  213. createMessage.success(t('common.optSuccess'));
  214. // }
  215. closeModal();
  216. emit('success');
  217. clearSelectedRowKeys();
  218. } catch (error) {
  219. console.log('error', error);
  220. }
  221. };
  222. const handleSelect = async () => {
  223. // const keys = getSelectRowKeys();
  224. // console.log('key', key);
  225. };
  226. const handleChange = (val, row) => {
  227. console.log('val,row', val, row);
  228. // updateTableDataRecord('canShow', values);
  229. // updateTableDataRecord
  230. };
  231. const onchange = (val, row) => {
  232. console.log('val,row', val, row, checkedObj.value);
  233. };
  234. return {
  235. register,
  236. schemas,
  237. registerTable,
  238. handleSubmit,
  239. searchInfo,
  240. closeModal,
  241. handleSelect,
  242. headerInfo,
  243. clearSelectedRowKeys,
  244. handleChange,
  245. t,
  246. checked,
  247. SelectRowsList,
  248. mapCheckedValue,
  249. checkedObj,
  250. onchange,
  251. };
  252. },
  253. });
  254. </script>