瀏覽代碼

账目管理交易名称修改

wangwei 3 年之前
父節點
當前提交
76fd6b4248

+ 2 - 1
src/api/sys/money.ts

@@ -100,10 +100,11 @@ export function deleteType(params: TypeIdParams) {
 /**
  * @description: GetAccountList -----------------------------------------------
  */
-export function getAccountList() {
+export function getAccountList(params) {
   return defHttp.request<GetAccountListModel>({
     url: Api.AccountUrl,
     method: 'GET',
+    params,
   });
 }
 

+ 2 - 2
src/components/Form/src/componentMap.ts

@@ -20,7 +20,7 @@ import {
 
 import RadioButtonGroup from './components/RadioButtonGroup.vue';
 import MultipleTreeSelect from './components/MultipleTreeSelect.vue';
-import ArrCom from './components/ArrCom.vue';
+import FamilyArrCom from './components/FamilyArrCom.vue';
 import ApiSelect from './components/ApiSelect.vue';
 import { BasicUpload } from '/@/components/Upload';
 import { StrengthMeter } from '/@/components/StrengthMeter';
@@ -37,7 +37,7 @@ componentMap.set('AutoComplete', AutoComplete);
 
 componentMap.set('Select', Select);
 componentMap.set('ApiSelect', ApiSelect);
-componentMap.set('ArrCom', ArrCom);
+componentMap.set('FamilyArrCom', FamilyArrCom);
 // componentMap.set('SelectOptGroup', Select.OptGroup);
 // componentMap.set('SelectOption', Select.Option);
 componentMap.set('TreeSelect', TreeSelect);

+ 0 - 0
src/components/Form/src/components/ArrCom.vue → src/components/Form/src/components/FamilyArrCom.vue


+ 1 - 1
src/components/Form/src/types/index.ts

@@ -89,7 +89,7 @@ export type ComponentType =
   | 'InputNumber'
   | 'InputCountDown'
   | 'Select'
-  | 'ArrCom'
+  | 'FamilyArrCom'
   | 'CustomInput'
   | 'ApiSelect'
   | 'SelectOptGroup'

+ 1 - 1
src/views/department/department/customCom/member/customCom/CustomInputPassword.vue

@@ -2,7 +2,7 @@
   <div class="wrap">
     <div class="content">
       <InputPassword :placeholder="placeholder" :value="value" @change="handleChange" />
-      <span style="color: #ddd; font-size: 13px">{{ tip }}</span>
+      <span style="font-size: 13px; color: #ddd">{{ tip }}</span>
     </div>
   </div>
 </template>

+ 1 - 1
src/views/department/department/customCom/member/customCom/person/data.ts

@@ -579,7 +579,7 @@ export const schemas: FormSchema[] = [
   },
   {
     field: 'family',
-    component: 'ArrCom',
+    component: 'FamilyArrCom',
     label: '家庭主要成员',
     labelWidth: adaptWidth.labelWidth,
     colProps: {

+ 0 - 19
src/views/department/department/customCom/member/popup.vue

@@ -58,17 +58,6 @@
                 ],
               },
             },
-            {
-              field: 'username',
-              componentProps: {
-                disabled: true,
-              },
-              required: false,
-            },
-            {
-              field: 'password',
-              required: false,
-            },
           ]);
           // data.username = data.admin.username;
           setFieldsValue(data);
@@ -85,14 +74,6 @@
                 ],
               },
             },
-            {
-              field: 'username',
-              required: true,
-            },
-            {
-              field: 'password',
-              required: true,
-            },
           ]);
         }
       });

+ 1 - 1
src/views/event/activity/customCom/member/customCom/CustomInputPassword.vue

@@ -2,7 +2,7 @@
   <div class="wrap">
     <div class="content">
       <InputPassword :placeholder="placeholder" :value="value" @change="handleChange" />
-      <span style="color: #ddd; font-size: 13px">{{ tip }}</span>
+      <span style="font-size: 13px; color: #ddd">{{ tip }}</span>
     </div>
   </div>
 </template>

+ 1 - 1
src/views/event/activity/customCom/member/customCom/person/data.ts

@@ -579,7 +579,7 @@ export const schemas: FormSchema[] = [
   },
   {
     field: 'family',
-    component: 'ArrCom',
+    component: 'FamilyArrCom',
     label: '家庭主要成员',
     labelWidth: adaptWidth.labelWidth,
     colProps: {

+ 0 - 19
src/views/event/activity/customCom/member/popup.vue

@@ -58,17 +58,6 @@
                 ],
               },
             },
-            {
-              field: 'username',
-              componentProps: {
-                disabled: true,
-              },
-              required: false,
-            },
-            {
-              field: 'password',
-              required: false,
-            },
           ]);
           // data.username = data.admin.username;
           setFieldsValue(data);
@@ -85,14 +74,6 @@
                 ],
               },
             },
-            {
-              field: 'username',
-              required: true,
-            },
-            {
-              field: 'password',
-              required: true,
-            },
           ]);
         }
       });

+ 1 - 1
src/views/event/meeting/customCom/member/customCom/CustomInputPassword.vue

@@ -2,7 +2,7 @@
   <div class="wrap">
     <div class="content">
       <InputPassword :placeholder="placeholder" :value="value" @change="handleChange" />
-      <span style="color: #ddd; font-size: 13px">{{ tip }}</span>
+      <span style="font-size: 13px; color: #ddd">{{ tip }}</span>
     </div>
   </div>
 </template>

+ 1 - 1
src/views/event/meeting/customCom/member/customCom/person/data.ts

@@ -579,7 +579,7 @@ export const schemas: FormSchema[] = [
   },
   {
     field: 'family',
-    component: 'ArrCom',
+    component: 'FamilyArrCom',
     label: '家庭主要成员',
     labelWidth: adaptWidth.labelWidth,
     colProps: {

+ 0 - 19
src/views/event/meeting/customCom/member/popup.vue

@@ -58,17 +58,6 @@
                 ],
               },
             },
-            {
-              field: 'username',
-              componentProps: {
-                disabled: true,
-              },
-              required: false,
-            },
-            {
-              field: 'password',
-              required: false,
-            },
           ]);
           // data.username = data.admin.username;
           setFieldsValue(data);
@@ -85,14 +74,6 @@
                 ],
               },
             },
-            {
-              field: 'username',
-              required: true,
-            },
-            {
-              field: 'password',
-              required: true,
-            },
           ]);
         }
       });

+ 1 - 1
src/views/member/member/customCom/CustomInputPassword.vue

@@ -2,7 +2,7 @@
   <div class="wrap">
     <div class="content">
       <InputPassword :placeholder="placeholder" :value="value" @change="handleChange" />
-      <span style="color: #ddd; font-size: 13px">{{ tip }}</span>
+      <span style="font-size: 13px; color: #ddd">{{ tip }}</span>
     </div>
   </div>
 </template>

+ 1 - 1
src/views/member/member/customCom/person/data.ts

@@ -579,7 +579,7 @@ export const schemas: FormSchema[] = [
   },
   {
     field: 'family',
-    component: 'ArrCom',
+    component: 'FamilyArrCom',
     label: '家庭主要成员',
     labelWidth: adaptWidth.labelWidth,
     colProps: {

+ 0 - 19
src/views/member/member/popup.vue

@@ -58,17 +58,6 @@
                 ],
               },
             },
-            {
-              field: 'username',
-              componentProps: {
-                disabled: true,
-              },
-              required: false,
-            },
-            {
-              field: 'password',
-              required: false,
-            },
           ]);
           // data.username = data.admin.username;
           setFieldsValue(data);
@@ -85,14 +74,6 @@
                 ],
               },
             },
-            {
-              field: 'username',
-              required: true,
-            },
-            {
-              field: 'password',
-              required: true,
-            },
           ]);
         }
       });

+ 1 - 1
src/views/member/person/data.ts

@@ -638,7 +638,7 @@ export const schemas: FormSchema[] = [
   },
   {
     field: 'family',
-    component: 'ArrCom',
+    component: 'FamilyArrCom',
     label: '家庭主要成员',
     labelWidth: adaptWidth.labelWidth,
     colProps: {

+ 176 - 0
src/views/money/bill/customCom/CustomApiTypeSelect.vue

@@ -0,0 +1,176 @@
+<template>
+  <Select
+    @dropdownVisibleChange="handleFetch"
+    v-bind="attrs"
+    :options="getOptions"
+    v-model:value="state"
+    :disabled="disabled"
+  >
+    <template #[item]="data" v-for="item in Object.keys($slots)">
+      <slot :name="item" v-bind="data"></slot>
+    </template>
+    <template #suffixIcon v-if="loading">
+      <LoadingOutlined spin />
+    </template>
+    <template #notFoundContent v-if="loading">
+      <span>
+        <LoadingOutlined spin class="mr-1" />
+        {{ t('component.form.apiSelectNotFound') }}
+      </span>
+    </template>
+  </Select>
+</template>
+<script lang="ts">
+  import {
+    defineComponent,
+    PropType,
+    ref,
+    watchEffect,
+    computed,
+    unref,
+    watch,
+    reactive,
+    toRefs,
+    onUpdated,
+  } from 'vue';
+  import { Select } from 'ant-design-vue';
+  import { isFunction } from '/@/utils/is';
+  import { useRuleFormItem } from '/@/hooks/component/useFormItem';
+  import { useAttrs } from '/@/hooks/core/useAttrs';
+  import { get, omit } from 'lodash-es';
+
+  import { LoadingOutlined } from '@ant-design/icons-vue';
+  import { useI18n } from '/@/hooks/web/useI18n';
+  import { propTypes } from '/@/utils/propTypes';
+
+  type OptionsItem = { label: string; value: string; disabled?: boolean };
+
+  export default defineComponent({
+    name: 'CustomApiTypeSelect',
+    components: {
+      Select,
+      LoadingOutlined,
+    },
+    inheritAttrs: false,
+    props: {
+      value: propTypes.oneOfType([
+        propTypes.object,
+        propTypes.number,
+        propTypes.string,
+        propTypes.array,
+      ]),
+      hideid: Number,
+      numberToString: propTypes.bool,
+      api: {
+        type: Function as PropType<(arg?: Recordable) => Promise<OptionsItem[]>>,
+        default: null,
+      },
+      // api params
+      params: {
+        type: Object as PropType<Recordable>,
+        default: () => ({}),
+      },
+      type: {
+        type: Number,
+        default: 0,
+      },
+      // support xxx.xxx.xx
+      resultField: propTypes.string.def(''),
+      labelField: propTypes.string.def('label'),
+      valueField: propTypes.string.def('value'),
+      immediate: propTypes.bool.def(true),
+    },
+    emits: ['options-change', 'change'],
+    setup(props, { emit }) {
+      const options = ref<OptionsItem[]>([]);
+      const loading = ref(false);
+      const isFirstLoad = ref(true);
+      const attrs = useAttrs();
+      const { t } = useI18n();
+      const reactData = reactive({
+        disabled: false,
+      });
+      // Embedded in the form, just use the hook binding to perform form verification
+      const [state] = useRuleFormItem(props);
+      const getOptions = computed(() => {
+        const { labelField, valueField, numberToString } = props;
+
+        return unref(options).reduce((prev, next: Recordable) => {
+          if (next) {
+            const value = next[valueField];
+            prev.push({
+              label: next[labelField],
+              value: numberToString ? `${value}` : value,
+              ...omit(next, [labelField, valueField]),
+            });
+          }
+          return prev;
+        }, [] as OptionsItem[]);
+      });
+
+      watchEffect(() => {
+        props.immediate && fetch();
+      });
+
+      watch(
+        () => props.hideid,
+        () => {
+          fetch();
+        },
+        { deep: true }
+      );
+      onUpdated(() => {
+        if (typeof props.value === 'string') {
+          reactData.disabled = true;
+        } else {
+          reactData.disabled = false;
+        }
+      });
+
+      async function fetch() {
+        const api = props.api;
+        if (!api || !isFunction(api)) return;
+
+        try {
+          loading.value = true;
+          const result = await api(props.params);
+          const res: OptionsItem[] = [];
+          result.list.map((item) => {
+            if (item.id !== props.hideid) {
+              res.push({ label: item.name, value: item.id });
+            }
+          });
+          if (props.type === 2) {
+            res.unshift({ label: '会费', value: '0' });
+          }
+          if (Array.isArray(res)) {
+            options.value = res;
+            emitChange();
+            return;
+          }
+          if (props.resultField) {
+            options.value = get(res, props.resultField) || [];
+          }
+          emitChange();
+        } catch (error) {
+          console.warn(error);
+        } finally {
+          loading.value = false;
+        }
+      }
+
+      async function handleFetch() {
+        if (!props.immediate && unref(isFirstLoad)) {
+          await fetch();
+          isFirstLoad.value = false;
+        }
+      }
+
+      function emitChange() {
+        emit('options-change', unref(options));
+      }
+
+      return { state, attrs, getOptions, loading, t, handleFetch, ...toRefs(reactData) };
+    },
+  });
+</script>

+ 1 - 1
src/views/money/bill/customCom/member/customCom/CustomInputPassword.vue

@@ -2,7 +2,7 @@
   <div class="wrap">
     <div class="content">
       <InputPassword :placeholder="placeholder" :value="value" @change="handleChange" />
-      <span style="color: #ddd; font-size: 13px">{{ tip }}</span>
+      <span style="font-size: 13px; color: #ddd">{{ tip }}</span>
     </div>
   </div>
 </template>

+ 1 - 1
src/views/money/bill/customCom/member/customCom/person/data.ts

@@ -579,7 +579,7 @@ export const schemas: FormSchema[] = [
   },
   {
     field: 'family',
-    component: 'ArrCom',
+    component: 'FamilyArrCom',
     label: '家庭主要成员',
     labelWidth: adaptWidth.labelWidth,
     colProps: {

+ 0 - 19
src/views/money/bill/customCom/member/popup.vue

@@ -58,17 +58,6 @@
                 ],
               },
             },
-            {
-              field: 'username',
-              componentProps: {
-                disabled: true,
-              },
-              required: false,
-            },
-            {
-              field: 'password',
-              required: false,
-            },
           ]);
           // data.username = data.admin.username;
           setFieldsValue(data);
@@ -85,14 +74,6 @@
                 ],
               },
             },
-            {
-              field: 'username',
-              required: true,
-            },
-            {
-              field: 'password',
-              required: true,
-            },
           ]);
         }
       });

+ 13 - 5
src/views/money/bill/data.ts

@@ -5,11 +5,12 @@ import { h } from 'vue';
 import { Tag } from 'ant-design-vue';
 import CustomInput from './customCom/CustomInput.vue';
 import CustomApiSelect from './customCom/CustomApiSelect.vue';
+import CustomApiTypeSelect from './customCom/CustomApiTypeSelect.vue';
 import YearPicker from './customCom/YearPicker.vue';
 import moment from 'moment';
 import { getYearFee } from '/@/api/sys/money';
 import UploadFile from '/@/views/general/config/customComponents/UploadFile.vue';
-import { getAccountList } from '/@/api/sys/money';
+import { getAccountList, getTypeList } from '/@/api/sys/money';
 
 const adaptWidth = adapt();
 
@@ -275,11 +276,18 @@ export const schemas: FormSchema[] = [
       span: adaptWidth.elContainer,
     },
     render: ({ model, field }) => {
-      return h(CustomInput, {
-        value: model.typename,
-        year: model.year,
-        type: model.type,
+      const hideid = model.inaccount;
+      const filter = JSON.stringify({ inOut: model.type });
+      const params = {
+        filter: filter,
+      };
+      return h(CustomApiTypeSelect, {
         placeholder: '交易名称',
+        api: getTypeList,
+        value: model.account,
+        type: model.type,
+        hideid: hideid,
+        params: params,
         onChange(value) {
           model[field] = value;
         },