addCameraModal.vue 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. <template>
  2. <BasicModal
  3. v-bind="$attrs"
  4. @register="register"
  5. :title="t('routes.rightsEnterprises.addcamera')"
  6. @ok="handleOk"
  7. width="600px"
  8. >
  9. <div style="padding-bottom: 90px" class="pt-3px pr-3px">
  10. <BasicForm @register="registerForm">
  11. <template #text="{ model, field }">
  12. {{ model[field] }}
  13. </template>
  14. </BasicForm>
  15. </div>
  16. </BasicModal>
  17. </template>
  18. <script lang="ts">
  19. import { defineComponent, ref, computed } from 'vue';
  20. import { addCamrea, deviceType } from '/@/api/rightsEnterprises/list'; //roleLIstApi
  21. import { BasicModal, useModalInner } from '/@/components/Modal';
  22. import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
  23. import { ListAllCompanyApi } from '/@/api/corporation/list';
  24. import { useI18n } from '/@/hooks/web/useI18n';
  25. import dayjs from 'dayjs';
  26. import { useMessage } from '/@/hooks/web/useMessage';
  27. import { useUserStore } from '/@/store/modules/user';
  28. const { t } = useI18n();
  29. export default defineComponent({
  30. components: { BasicModal, BasicForm },
  31. props: {
  32. userData: { type: Object },
  33. },
  34. emits: ['ok', 'register'],
  35. setup(_, context) {
  36. const modelRef = ref({
  37. isSee: false,
  38. });
  39. const userStore = useUserStore();
  40. const userinfo = computed(() => userStore.getUserInfo);
  41. const { companyId } = userinfo.value;
  42. console.log('companyId', companyId);
  43. const schemas: FormSchema[] = [
  44. {
  45. field: 'companyId',
  46. label: t('routes.rightsEnterprises.companyName'),
  47. component: 'ApiSelect',
  48. itemProps: {
  49. validateTrigger: 'blur',
  50. },
  51. colProps: {
  52. span: 22,
  53. },
  54. required: true,
  55. componentProps: {
  56. api: ListAllCompanyApi,
  57. showSearch: true,
  58. resultField: 'list',
  59. labelField: 'name',
  60. valueField: 'id',
  61. optionFilterProp: 'label',
  62. immediate: true,
  63. params: {
  64. page: 1,
  65. limit: 1000,
  66. },
  67. onOptionsChange: (data) => {
  68. console.log('data', data, arguments);
  69. },
  70. onChange: (data) => {
  71. console.log('data', data, arguments);
  72. },
  73. },
  74. },
  75. {
  76. field: 'userIncrementTypeId',
  77. label: t('routes.rightsEnterprises.cameraIncrementTypeName'),
  78. component: 'ApiSelect',
  79. itemProps: {
  80. validateTrigger: 'blur',
  81. },
  82. colProps: {
  83. span: 22,
  84. },
  85. required: true,
  86. // ifShow: getCheckRole('plat_admin'),
  87. componentProps: {
  88. api: deviceType,
  89. showSearch: true,
  90. resultField: 'list',
  91. labelField: 'name',
  92. valueField: 'id',
  93. optionFilterProp: 'label',
  94. immediate: true,
  95. params: {
  96. page: 1,
  97. limit: 1000,
  98. },
  99. required: true,
  100. },
  101. },
  102. {
  103. label: t('routes.rightsEnterprises.incrementNum'),
  104. field: 'incrementNum',
  105. component: 'Input',
  106. colProps: {
  107. span: 22,
  108. },
  109. componentProps: {
  110. maxLength: 3,
  111. },
  112. rules: [
  113. {
  114. required: true,
  115. // @ts-ignore
  116. validator: async (rule, value) => {
  117. var regPos = /(^[1-9]\d*$)/; // 非负整数
  118. // var reg = /\S+@\S+\.\S+/;
  119. if (!value) {
  120. return Promise.reject('请输入权益数');
  121. }
  122. if (!regPos.test(value)) {
  123. /* eslint-disable-next-line */
  124. return Promise.reject('请输入正确的权益数');
  125. }
  126. return Promise.resolve();
  127. },
  128. trigger: 'change',
  129. },
  130. ],
  131. },
  132. {
  133. field: 'incrementEndTime',
  134. component: 'DatePicker',
  135. label: t('routes.rightsEnterprises.expirationTime'),
  136. colProps: {
  137. span: 22,
  138. },
  139. componentProps: {
  140. valueFormat: 'YYYY-MM-DD',
  141. disabledDate: (current) => {
  142. return current && current < dayjs().endOf('day');
  143. },
  144. },
  145. },
  146. ];
  147. const title = ref('绑 定');
  148. const { createMessage } = useMessage();
  149. const [registerForm, { setFieldsValue, validate, updateSchema, resetFields }] = useForm({
  150. labelWidth: 120,
  151. schemas,
  152. showActionButtonGroup: false,
  153. actionColOptions: {
  154. span: 24,
  155. },
  156. });
  157. const [register, { closeModal }] = useModalInner((data) => {
  158. data && onDataReceive(data);
  159. });
  160. function onDataReceive(data) {
  161. // 方式1;
  162. modelRef.value.isSee = data.userId ? true : false;
  163. setFieldsValue({
  164. ...data,
  165. userId: data.userId ? data.staffName : data.userId,
  166. });
  167. let setSchema = [
  168. {
  169. field: 'companyId',
  170. componentProps: {
  171. disabled: !data.modify,
  172. },
  173. },
  174. ];
  175. console.log('handleDelete', data, setSchema);
  176. updateSchema(setSchema);
  177. }
  178. async function handleOk() {
  179. if (modelRef.value.isSee) {
  180. return closeModal();
  181. }
  182. let data = await validate();
  183. let res = await addCamrea({
  184. ...data,
  185. });
  186. context && context.emit('update', res);
  187. createMessage.success(t('common.optSuccess'));
  188. closeModal();
  189. resetFields();
  190. }
  191. return {
  192. register,
  193. title,
  194. schemas,
  195. registerForm,
  196. modelRef,
  197. handleOk,
  198. resetFields,
  199. t,
  200. };
  201. },
  202. });
  203. </script>