detailsMoadl.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  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. colProps: {
  64. span: 18,
  65. },
  66. componentProps: {
  67. options: [
  68. {
  69. label: t('routes.product.outType.0'),
  70. value: '0',
  71. key: '0',
  72. },
  73. {
  74. label: t('routes.product.outType.1'),
  75. value: '1',
  76. key: '1',
  77. },
  78. {
  79. label: t('routes.product.outType.2'),
  80. value: 2,
  81. key: '2',
  82. },
  83. {
  84. label: t('routes.product.outType.3'),
  85. value: '3',
  86. key: '3',
  87. },
  88. ],
  89. },
  90. },
  91. {
  92. field: 'companyName',
  93. component: 'AutoComplete',
  94. label: '客户名称',
  95. colProps: {
  96. span: 18,
  97. },
  98. componentProps: {
  99. filterOption: onFilterOption,
  100. onSearch: async (searchText: string) => {
  101. const {list} = await companyList({ companyName: searchText });
  102. let optionsList = list.map((ele) => { return { ...ele,value: ele.companyName }; }) || []
  103. console.log('paramList',optionsList)
  104. optionsName.value = optionsList || [];
  105. updateSchema({
  106. field: 'companyName',
  107. componentProps:{
  108. options: optionsName.value,
  109. },
  110. })
  111. },
  112. onChange: (data) => {
  113. console.log('data', data);
  114. },
  115. },
  116. },
  117. {
  118. field: 'orderSn',
  119. component: 'AutoComplete',
  120. label: '订单号',
  121. colProps: {
  122. span: 18,
  123. },
  124. componentProps: {
  125. options: optionsOrderSn.value,
  126. filterOption: onFilterOption,
  127. onSearch: async (searchText: string) => {
  128. const { list } = await CameraList({ orderSn: searchText });
  129. optionsOrderSn.value = !searchText ? [] : list.map((ele) => { return { value: ele.orderSn }; });
  130. updateSchema({
  131. field: 'orderSn',
  132. componentProps:{
  133. options: optionsOrderSn.value,
  134. },
  135. })
  136. },
  137. onChange: (data) => {
  138. console.log('data', data);
  139. },
  140. },
  141. },
  142. ];
  143. const [registerForm, { validate, resetFields, setFieldsValue, updateSchema }] = useForm({
  144. labelWidth: 120,
  145. schemas,
  146. showActionButtonGroup: false,
  147. actionColOptions: {
  148. span: 24,
  149. },
  150. });
  151. onMounted(() => {});
  152. let addListFunc = () => {};
  153. const [register, { closeModal }] = useModalInner((data) => {
  154. // console.log(data);
  155. data && onDataReceive(data);
  156. });
  157. function onDataReceive(data) {
  158. modelRef.value = data;
  159. title.value = data.isUpdate?'编辑':'设备出库'
  160. console.log('onDataReceive', data);
  161. const { outType } = data;
  162. let obj = t('routes.product.outType')
  163. resetFields();
  164. setFieldsValue({
  165. type: obj[outType],
  166. ...data,
  167. });
  168. }
  169. const handleSubmit = async () => {
  170. const apiUrl = modelRef.value.isUpdate?cameraUpdate:cameraOut
  171. try {
  172. const params = await validate();
  173. console.log('params', params);
  174. const res = await apiUrl(params);
  175. console.log('res', res);
  176. closeModal();
  177. resetFields();
  178. createMessage.success(t('common.optSuccess'));
  179. emit('reload');
  180. } catch (error) {
  181. console.log('not passing', error);
  182. }
  183. };
  184. function onFilterOption(inputText: string, option: Option) {
  185. return option.value.toUpperCase().indexOf(inputText.toUpperCase()) >= 0;
  186. }
  187. function handleVisibleChange(v) {
  188. // console.log(v);
  189. // v && props.userData && nextTick(() => onDataReceive(props.userData));
  190. }
  191. async function getTemplate() {
  192. try {
  193. const res = await downTemplate({ type: 2 });
  194. console.log('res', res);
  195. } catch (error) {
  196. console.log('not passing', error);
  197. }
  198. }
  199. return {
  200. register,
  201. schemas,
  202. registerForm,
  203. model: modelRef,
  204. title,
  205. fileFlow,
  206. handleVisibleChange,
  207. onFilterOption,
  208. handleSubmit,
  209. addListFunc,
  210. resetFields,
  211. t,
  212. getTemplate,
  213. };
  214. },
  215. });
  216. </script>