detailsMoadl.vue 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. <template>
  2. <BasicModal
  3. v-bind="$attrs"
  4. @register="register"
  5. :title="title"
  6. @visible-change="handleVisibleChange"
  7. @cancel="resetFields"
  8. @ok="handleSubmit"
  9. :min-height="160"
  10. >
  11. <div class="pt-2px pr-3px">
  12. <BasicForm @register="registerForm" :model="model">
  13. <template #text="{ model, field }">
  14. {{ model[field] }}
  15. </template>
  16. </BasicForm>
  17. </div>
  18. </BasicModal>
  19. </template>
  20. <script lang="ts">
  21. import { defineComponent, ref, onMounted, reactive } from 'vue';
  22. import { BasicModal, useModalInner } from '/@/components/Modal';
  23. import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
  24. import { useMessage } from '/@/hooks/web/useMessage';
  25. import { companyList } from '/@/api/customer';
  26. // import { sceneMove } from '/@/api/operate';
  27. import { downTemplate } from '/@/api/customer';
  28. import { cameraParam, cameraUpdate, cameraOut } from '/@/api/device';
  29. import { agentNewList } from '/@/api/dealer';
  30. import { CameraList } from '/@/api/order';
  31. import { useI18n } from '/@/hooks/web/useI18n';
  32. import dayjs from 'dayjs';
  33. const { t } = useI18n();
  34. interface Option {
  35. value: string;
  36. }
  37. export default defineComponent({
  38. components: { BasicModal, BasicForm },
  39. props: {
  40. userData: { type: Object },
  41. },
  42. emits: ['reload'],
  43. setup(_, { emit }) {
  44. const modelRef = ref({
  45. isUpdate: false,
  46. });
  47. const title = ref('设备出库');
  48. const optionsOrderSn = ref<Option[]>([]);
  49. const optionsName = ref<Option[]>([]);
  50. const fileFlow = reactive({
  51. file: null,
  52. });
  53. const { createMessage } = useMessage();
  54. const schemas: FormSchema[] = [
  55. {
  56. field: 'id',
  57. component: 'Input',
  58. label: 'id',
  59. show: false,
  60. },
  61. {
  62. field: 'outType',
  63. component: 'Select',
  64. label: '出库类型',
  65. required: true,
  66. colProps: {
  67. span: 18,
  68. },
  69. componentProps: {
  70. options: [
  71. {
  72. label: t('routes.product.outType.0'),
  73. value: '0',
  74. key: '0',
  75. },
  76. {
  77. label: t('routes.product.outType.1'),
  78. value: '1',
  79. key: '1',
  80. },
  81. {
  82. label: t('routes.product.outType.2'),
  83. value: '2',
  84. key: '2',
  85. },
  86. {
  87. label: t('routes.product.outType.3'),
  88. value: '3',
  89. key: '3',
  90. },
  91. ],
  92. onChange: (value) => {
  93. // updateSchema([{field: 'agentId',ifShow:value=='4',},
  94. // {field: 'companyName',ifShow:value!='4',}])
  95. },
  96. },
  97. },
  98. // {
  99. // field: 'agentId',
  100. // component: 'ApiSelect',
  101. // label: '经销商名称',
  102. // componentProps: {
  103. // filterOption: onFilterOption,
  104. // showSearch: true,
  105. // api: async function () {
  106. // const { list } = await agentNewList({ pageSize: 1000, pageNum: 1 });
  107. // return list;
  108. // },
  109. // // numberToString: true,
  110. // labelField: 'name',
  111. // valueField: 'id',
  112. // immediate: true,
  113. // params: {
  114. // agentName: '',
  115. // },
  116. // },
  117. // colProps: {
  118. // span: 18,
  119. // },
  120. // },
  121. // {
  122. // field: 'companyName',
  123. // component: 'AutoComplete',
  124. // label: '客户名称',
  125. // colProps: {
  126. // span: 18,
  127. // },
  128. // componentProps: {
  129. // filterOption: onFilterOption,
  130. // onSearch: async (searchText: string) => {
  131. // const { list } = await companyList({ companyName: searchText });
  132. // let optionsList =
  133. // list.map((ele) => {
  134. // return { ...ele, value: ele.companyName };
  135. // }) || [];
  136. // console.log('paramList', optionsList);
  137. // optionsName.value = optionsList || [];
  138. // updateSchema({
  139. // field: 'companyName',
  140. // componentProps: {
  141. // options: optionsName.value,
  142. // },
  143. // });
  144. // },
  145. // onChange: (data) => {
  146. // console.log('data', data);
  147. // },
  148. // },
  149. // },
  150. // {
  151. // field: 'orderSn',
  152. // component: 'AutoComplete',
  153. // label: '订单号',
  154. // colProps: {
  155. // span: 18,
  156. // },
  157. // componentProps: {
  158. // options: optionsOrderSn.value,
  159. // filterOption: onFilterOption,
  160. // onSearch: async (searchText: string) => {
  161. // const { list } = await CameraList({ orderSn: searchText });
  162. // optionsOrderSn.value = !searchText
  163. // ? []
  164. // : list.map((ele) => {
  165. // return { value: ele.orderSn };
  166. // });
  167. // updateSchema({
  168. // field: 'orderSn',
  169. // componentProps: {
  170. // options: optionsOrderSn.value,
  171. // },
  172. // });
  173. // },
  174. // onChange: (data) => {
  175. // console.log('data', data);
  176. // },
  177. // },
  178. // },
  179. {
  180. field: 'buyDate',
  181. component: 'DatePicker',
  182. label: '购买日期',
  183. required: true,
  184. defaultValue: dayjs().format('YYYY-MM-DD'),
  185. colProps: {
  186. span: 16,
  187. },
  188. componentProps: {
  189. disabled: false,
  190. valueFormat: 'YYYY-MM-DD',
  191. format: 'YYYY-MM-DD',
  192. },
  193. },
  194. ];
  195. const [registerForm, { validate, resetFields, setFieldsValue, updateSchema }] = useForm({
  196. labelWidth: 120,
  197. schemas,
  198. showActionButtonGroup: false,
  199. actionColOptions: {
  200. span: 24,
  201. },
  202. });
  203. onMounted(() => {});
  204. let addListFunc = () => {};
  205. const [register, { closeModal }] = useModalInner((data) => {
  206. // console.log(data);
  207. data && onDataReceive(data);
  208. });
  209. function onDataReceive(data) {
  210. modelRef.value = data;
  211. title.value = data.isUpdate ? '编辑' : '设备出库';
  212. console.log('onDataReceive', data);
  213. const { outType } = data;
  214. let obj = t('routes.product.outType');
  215. resetFields();
  216. // updateSchema([{field: 'agentId',ifShow:data.outType=='4',},
  217. // {field: 'companyName',ifShow:data.outType!='4',}])
  218. setFieldsValue({
  219. type: obj[outType],
  220. ...data,
  221. });
  222. }
  223. const handleSubmit = async () => {
  224. const apiUrl = modelRef.value.isUpdate ? cameraUpdate : cameraOut;
  225. try {
  226. const params = await validate();
  227. console.log('params', params);
  228. const res = await apiUrl({
  229. ...params,
  230. // companyName:params.outType == 4?'':params.companyName,
  231. // agentId:params.outType != 4?'':params.agentId,
  232. });
  233. console.log('res', res);
  234. closeModal();
  235. resetFields();
  236. createMessage.success(t('common.optSuccess'));
  237. emit('reload');
  238. } catch (error) {
  239. console.log('not passing', error);
  240. }
  241. };
  242. function onFilterOption(inputText: string, option: Option) {
  243. if (option.label) {
  244. return option.label.toUpperCase().indexOf(inputText.toUpperCase()) >= 0;
  245. }
  246. return option.value.toUpperCase().indexOf(inputText.toUpperCase()) >= 0;
  247. }
  248. function handleVisibleChange(v) {
  249. // console.log(v);
  250. // v && props.userData && nextTick(() => onDataReceive(props.userData));
  251. }
  252. async function getTemplate() {
  253. try {
  254. const res = await downTemplate({ type: 2 });
  255. console.log('res', res);
  256. } catch (error) {
  257. console.log('not passing', error);
  258. }
  259. }
  260. return {
  261. register,
  262. schemas,
  263. registerForm,
  264. model: modelRef,
  265. title,
  266. fileFlow,
  267. handleVisibleChange,
  268. onFilterOption,
  269. handleSubmit,
  270. addListFunc,
  271. resetFields,
  272. t,
  273. getTemplate,
  274. };
  275. },
  276. });
  277. </script>