detailsMoadl.vue 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  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. :height="800"
  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 { CameraList } from '/@/api/order';
  30. import { useI18n } from '/@/hooks/web/useI18n';
  31. const { t } = useI18n();
  32. interface Option {
  33. value: string;
  34. }
  35. export default defineComponent({
  36. components: { BasicModal, BasicForm },
  37. props: {
  38. userData: { type: Object },
  39. },
  40. emits: ['reload'],
  41. setup(_, { emit }) {
  42. const modelRef = ref({
  43. isUpdate:false,
  44. });
  45. const title = ref('设备出库');
  46. const optionsOrderSn = ref<Option[]>([]);
  47. const optionsName = ref<Option[]>([]);
  48. const fileFlow = reactive({
  49. file: null,
  50. });
  51. const { createMessage } = useMessage();
  52. const schemas: FormSchema[] = [
  53. {
  54. field: 'id',
  55. component: 'Input',
  56. label: 'id',
  57. show: false,
  58. },
  59. {
  60. field: 'outType',
  61. component: 'Select',
  62. label: '出库类型',
  63. required: true,
  64. colProps: {
  65. span: 18,
  66. },
  67. componentProps: {
  68. options: [
  69. {
  70. label: t('routes.product.outType.0'),
  71. value: '0',
  72. key: '0',
  73. },{
  74. label: t('routes.product.outType.4'),
  75. value: 4,
  76. key: '4',
  77. },
  78. {
  79. label: t('routes.product.outType.1'),
  80. value: '1',
  81. key: '1',
  82. },
  83. {
  84. label: t('routes.product.outType.2'),
  85. value: 2,
  86. key: '2',
  87. },
  88. {
  89. label: t('routes.product.outType.3'),
  90. value: '3',
  91. key: '3',
  92. },
  93. ],
  94. },
  95. },
  96. {
  97. field: 'companyName',
  98. component: 'AutoComplete',
  99. label: '客户名称',
  100. colProps: {
  101. span: 18,
  102. },
  103. componentProps: {
  104. filterOption: onFilterOption,
  105. onSearch: async (searchText: string) => {
  106. const {list} = await companyList({ companyName: searchText });
  107. let optionsList = list.map((ele) => { return { ...ele,value: ele.companyName }; }) || []
  108. console.log('paramList',optionsList)
  109. optionsName.value = optionsList || [];
  110. updateSchema({
  111. field: 'companyName',
  112. componentProps:{
  113. options: optionsName.value,
  114. },
  115. })
  116. },
  117. onChange: (data) => {
  118. console.log('data', data);
  119. },
  120. },
  121. },
  122. {
  123. field: 'orderSn',
  124. component: 'AutoComplete',
  125. label: '订单号',
  126. colProps: {
  127. span: 18,
  128. },
  129. componentProps: {
  130. options: optionsOrderSn.value,
  131. filterOption: onFilterOption,
  132. onSearch: async (searchText: string) => {
  133. const { list } = await CameraList({ orderSn: searchText });
  134. optionsOrderSn.value = !searchText ? [] : list.map((ele) => { return { value: ele.orderSn }; });
  135. updateSchema({
  136. field: 'orderSn',
  137. componentProps:{
  138. options: optionsOrderSn.value,
  139. },
  140. })
  141. },
  142. onChange: (data) => {
  143. console.log('data', data);
  144. },
  145. },
  146. },
  147. ];
  148. const [registerForm, { validate, resetFields, setFieldsValue, updateSchema }] = useForm({
  149. labelWidth: 120,
  150. schemas,
  151. showActionButtonGroup: false,
  152. actionColOptions: {
  153. span: 24,
  154. },
  155. });
  156. onMounted(() => {});
  157. let addListFunc = () => {};
  158. const [register, { closeModal }] = useModalInner((data) => {
  159. // console.log(data);
  160. data && onDataReceive(data);
  161. });
  162. function onDataReceive(data) {
  163. modelRef.value = data;
  164. title.value = data.isUpdate?'编辑':'设备出库'
  165. console.log('onDataReceive', data);
  166. const { outType } = data;
  167. let obj = t('routes.product.outType')
  168. resetFields();
  169. setFieldsValue({
  170. type: obj[outType],
  171. ...data,
  172. });
  173. }
  174. const handleSubmit = async () => {
  175. const apiUrl = modelRef.value.isUpdate?cameraUpdate:cameraOut
  176. try {
  177. const params = await validate();
  178. console.log('params', params);
  179. const res = await apiUrl(params);
  180. console.log('res', res);
  181. closeModal();
  182. resetFields();
  183. createMessage.success(t('common.optSuccess'));
  184. emit('reload');
  185. } catch (error) {
  186. console.log('not passing', error);
  187. }
  188. };
  189. function onFilterOption(inputText: string, option: Option) {
  190. return option.value.toUpperCase().indexOf(inputText.toUpperCase()) >= 0;
  191. }
  192. function handleVisibleChange(v) {
  193. // console.log(v);
  194. // v && props.userData && nextTick(() => onDataReceive(props.userData));
  195. }
  196. async function getTemplate() {
  197. try {
  198. const res = await downTemplate({ type: 2 });
  199. console.log('res', res);
  200. } catch (error) {
  201. console.log('not passing', error);
  202. }
  203. }
  204. return {
  205. register,
  206. schemas,
  207. registerForm,
  208. model: modelRef,
  209. title,
  210. fileFlow,
  211. handleVisibleChange,
  212. onFilterOption,
  213. handleSubmit,
  214. addListFunc,
  215. resetFields,
  216. t,
  217. getTemplate,
  218. };
  219. },
  220. });
  221. </script>