detailsMoadl.vue 6.0 KB

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