RateModal.vue 2.15 KB
<template>
  <BasicModal
    v-bind="$attrs"
    destroyOnClose
    @register="register"
    title="比重计算"
    width="600px"
    @visible-change="handleShow"
    :footer="null"
  >
    <Space>
      <span>
        设计师:
        <Select :options="manualPreform" placeholder="请选择" v-model:value="activeUser" />
      </span>
      <a-button type="primary" @click="handleCalc" className="ml-4">计算</a-button>
    </Space>
    <div className="mt-2">比重结果:{{ info }}</div>
  </BasicModal>
</template>
<script lang="ts">
  import { defineComponent, ref } from 'vue';
  import { BasicModal, useModalInner } from '/@/components/Modal';
  import { orderGravity } from '/@/api/project/order';
  import { Select, Space } from 'ant-design-vue';
  import { useOrderStoreWithOut } from '/@/store/modules/order';
  import { useOrderInfo } from '/@/hooks/component/order';

  export default defineComponent({
    components: { BasicModal, Select, Space },
    setup() {
      const orderStore = useOrderStoreWithOut();
      const { manualPreform, exchangeRate } = useOrderInfo(orderStore);

      const loading = ref(true);
      const activeUser = ref();
      const info = ref();
      const searchData = ref({});
      const [register, { setModalProps }] = useModalInner(async (data) => {
        searchData.value = data.data || {};
        activeUser.value = undefined;
        info.value = '';
      });

      function handleShow(visible: boolean) {
        if (visible) {
          loading.value = true;
          // setModalProps({ loading: true, confirmLoading: true });
          setModalProps({ loading: false, confirmLoading: false });
        }
      }

      async function handleCalc() {
        const res = await orderGravity({
          ...searchData.value,
          designer: activeUser.value,
        });
        info.value = res?.rate || 0;
      }
      return {
        register,
        loading,
        handleShow,
        info,
        manualPreform,
        handleCalc,
        activeUser,
        exchangeRate,
      };
    },
  });
</script>
<style scoped>
  .empty-tips {
    height: 100px;
    line-height: 100px;
    text-align: center;
  }
</style>