|  | @@ -3,7 +3,12 @@ import { computed, ref } from 'vue';
 | 
	
		
			
				|  |  |  import { NButton, NImage, NInputNumber, NSelect } from 'naive-ui';
 | 
	
		
			
				|  |  |  import dayjs from 'dayjs';
 | 
	
		
			
				|  |  |  import { fetchGetAllStoreList } from '@/service/api/goods/desk-category';
 | 
	
		
			
				|  |  | -import { fetchGetAllChannelList, fetchGetGoodsList, fetchImportGoods } from '@/service/api/goods/store-goods';
 | 
	
		
			
				|  |  | +import {
 | 
	
		
			
				|  |  | +  fetchGetAllChannelList,
 | 
	
		
			
				|  |  | +  fetchGetGoodsList,
 | 
	
		
			
				|  |  | +  fetchImportGoods,
 | 
	
		
			
				|  |  | +  fetchSetUpChannels
 | 
	
		
			
				|  |  | +} from '@/service/api/goods/store-goods';
 | 
	
		
			
				|  |  |  import { areAllItemsAllFieldsFilled } from '@/utils/zt';
 | 
	
		
			
				|  |  |  import { useTable } from '@/components/zt/Table/hooks/useTable';
 | 
	
		
			
				|  |  |  import type { ModalMethods } from '@/components/zt/Modal/types';
 | 
	
	
		
			
				|  | @@ -11,6 +16,9 @@ import SvgIcon from '@/components/custom/svg-icon.vue';
 | 
	
		
			
				|  |  |  import { useModal } from '@/components/zt/Modal/hooks/useModal';
 | 
	
		
			
				|  |  |  type Price = { channelId: number | undefined; channelProdPrice: number; id: number };
 | 
	
		
			
				|  |  |  const importTemplateRef = ref<ModalMethods>();
 | 
	
		
			
				|  |  | +const options = ref<Api.goods.Channel[]>([]);
 | 
	
		
			
				|  |  | +const TypeName = ['C端用户', '企业用户', 'B端用户'];
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  const columns: NaiveUI.TableColumn<Api.goods.ShopSku>[] = [
 | 
	
		
			
				|  |  |    {
 | 
	
		
			
				|  |  |      type: 'selection',
 | 
	
	
		
			
				|  | @@ -59,7 +67,7 @@ const columns: NaiveUI.TableColumn<Api.goods.ShopSku>[] = [
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      render: row => {
 | 
	
		
			
				|  |  |        const nameList = row.channelProdList?.map(it => it.shopName);
 | 
	
		
			
				|  |  | -      return <div>{nameList?.join(',')}</div>;
 | 
	
		
			
				|  |  | +      return <div>{nameList?.join(',') || '--'}</div>;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    },
 | 
	
		
			
				|  |  |    {
 | 
	
	
		
			
				|  | @@ -74,6 +82,7 @@ const columns: NaiveUI.TableColumn<Api.goods.ShopSku>[] = [
 | 
	
		
			
				|  |  |      align: 'center',
 | 
	
		
			
				|  |  |      width: 120,
 | 
	
		
			
				|  |  |      render: row => {
 | 
	
		
			
				|  |  | +      if (!row.channelProdList?.length) return '--';
 | 
	
		
			
				|  |  |        if (row.channelProdList) return <div>{row.channelProdList[0].purchasePrice}</div>;
 | 
	
		
			
				|  |  |        return '--';
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -84,6 +93,7 @@ const columns: NaiveUI.TableColumn<Api.goods.ShopSku>[] = [
 | 
	
		
			
				|  |  |      align: 'center',
 | 
	
		
			
				|  |  |      width: 150,
 | 
	
		
			
				|  |  |      render: row => {
 | 
	
		
			
				|  |  | +      if (!row.channelProdList?.length) return '--';
 | 
	
		
			
				|  |  |        if (row.channelProdList) return <div>{row.channelProdList[0].deliveryPrice}</div>;
 | 
	
		
			
				|  |  |        return '--';
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -92,19 +102,18 @@ const columns: NaiveUI.TableColumn<Api.goods.ShopSku>[] = [
 | 
	
		
			
				|  |  |      key: 'name',
 | 
	
		
			
				|  |  |      title: '销售渠道及价格',
 | 
	
		
			
				|  |  |      align: 'center',
 | 
	
		
			
				|  |  | -    width: 150,
 | 
	
		
			
				|  |  | +    width: 250,
 | 
	
		
			
				|  |  |      render: row => {
 | 
	
		
			
				|  |  |        return row.channelProdList?.map(it => {
 | 
	
		
			
				|  |  |          return (
 | 
	
		
			
				|  |  |            <div>
 | 
	
		
			
				|  |  | -            {it.channelName} : {it.channelProdPrice}
 | 
	
		
			
				|  |  | +            {TypeName[Number(it.channelId) - 1]} ({it.channelName || '--'}) : {it.channelProdPrice || '--'}
 | 
	
		
			
				|  |  |            </div>
 | 
	
		
			
				|  |  |          );
 | 
	
		
			
				|  |  |        });
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  ];
 | 
	
		
			
				|  |  | -const options = ref<Api.goods.Channel[]>([]);
 | 
	
		
			
				|  |  |  const PriceColumns: NaiveUI.TableColumn<Price>[] = [
 | 
	
		
			
				|  |  |    {
 | 
	
		
			
				|  |  |      title: '销售渠道',
 | 
	
	
		
			
				|  | @@ -118,8 +127,28 @@ const PriceColumns: NaiveUI.TableColumn<Price>[] = [
 | 
	
		
			
				|  |  |            labelField="channelName"
 | 
	
		
			
				|  |  |            valueField="id"
 | 
	
		
			
				|  |  |            value={row.channelId}
 | 
	
		
			
				|  |  | +          clearable
 | 
	
		
			
				|  |  |            onUpdate:value={value => {
 | 
	
		
			
				|  |  | -            row.channelId = Number(value);
 | 
	
		
			
				|  |  | +            options.value.map(it => {
 | 
	
		
			
				|  |  | +              if (it.id == row.channelId) {
 | 
	
		
			
				|  |  | +                it.disabled = false;
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +              return it;
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  | +            row.channelId = value ? Number(value) : undefined;
 | 
	
		
			
				|  |  | +          }}
 | 
	
		
			
				|  |  | +          onUpdate:show={value => {
 | 
	
		
			
				|  |  | +            options.value.map(it => {
 | 
	
		
			
				|  |  | +              if (it.id == row.channelId) {
 | 
	
		
			
				|  |  | +                if (value) {
 | 
	
		
			
				|  |  | +                  it.disabled = false;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                if (!value) {
 | 
	
		
			
				|  |  | +                  it.disabled = true;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +              return it;
 | 
	
		
			
				|  |  | +            });
 | 
	
		
			
				|  |  |            }}
 | 
	
		
			
				|  |  |          ></NSelect>
 | 
	
		
			
				|  |  |        );
 | 
	
	
		
			
				|  | @@ -146,7 +175,7 @@ const PriceColumns: NaiveUI.TableColumn<Price>[] = [
 | 
	
		
			
				|  |  |    {
 | 
	
		
			
				|  |  |      title: () => {
 | 
	
		
			
				|  |  |        return (
 | 
	
		
			
				|  |  | -        <div onClick={() => handleAddPrice()}>
 | 
	
		
			
				|  |  | +        <div onClick={() => handleAddPrice()} class={'w-full flex items-center justify-center'}>
 | 
	
		
			
				|  |  |            <SvgIcon
 | 
	
		
			
				|  |  |              icon={'proicons:add-square'}
 | 
	
		
			
				|  |  |              class={'cursor-pointer text-24px'}
 | 
	
	
		
			
				|  | @@ -157,9 +186,10 @@ const PriceColumns: NaiveUI.TableColumn<Price>[] = [
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  |      key: 'action',
 | 
	
		
			
				|  |  |      width: 80,
 | 
	
		
			
				|  |  | +    align: 'center',
 | 
	
		
			
				|  |  |      render: row => {
 | 
	
		
			
				|  |  |        return (
 | 
	
		
			
				|  |  | -        <div onClick={() => handleDelPrice(row.id)}>
 | 
	
		
			
				|  |  | +        <div onClick={() => handleDelPrice(row.id)} class={'w-full flex items-center justify-center'}>
 | 
	
		
			
				|  |  |            <SvgIcon
 | 
	
		
			
				|  |  |              icon={'proicons:subtract-square'}
 | 
	
		
			
				|  |  |              class={'cursor-pointer text-24px'}
 | 
	
	
		
			
				|  | @@ -172,7 +202,7 @@ const PriceColumns: NaiveUI.TableColumn<Price>[] = [
 | 
	
		
			
				|  |  |  ];
 | 
	
		
			
				|  |  |  const PriceData = ref<Price[]>([]);
 | 
	
		
			
				|  |  |  const selectData = ref<Api.goods.ShopSku>();
 | 
	
		
			
				|  |  | -const [registerTable, { getTableCheckedRowKeys }] = useTable({
 | 
	
		
			
				|  |  | +const [registerTable, { getTableCheckedRowKeys, refresh, getTableData }] = useTable({
 | 
	
		
			
				|  |  |    searchFormConfig: {
 | 
	
		
			
				|  |  |      schemas: [
 | 
	
		
			
				|  |  |        {
 | 
	
	
		
			
				|  | @@ -204,7 +234,10 @@ const [registerTable, { getTableCheckedRowKeys }] = useTable({
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -const [registerModalPrice, { openModal: openPriceModal, setSubLoading: setSubModalLoding }] = useModal({
 | 
	
		
			
				|  |  | +const [
 | 
	
		
			
				|  |  | +  registerModalPrice,
 | 
	
		
			
				|  |  | +  { openModal: openPriceModal, setSubLoading: setSubModalLoding, closeModal: closePriceModal }
 | 
	
		
			
				|  |  | +] = useModal({
 | 
	
		
			
				|  |  |    title: '设置渠道及价格',
 | 
	
		
			
				|  |  |    width: 800,
 | 
	
		
			
				|  |  |    height: 300
 | 
	
	
		
			
				|  | @@ -213,6 +246,9 @@ const [registerModalPrice, { openModal: openPriceModal, setSubLoading: setSubMod
 | 
	
		
			
				|  |  |  const isDisabledExport = computed(() => {
 | 
	
		
			
				|  |  |    return !getTableCheckedRowKeys().length;
 | 
	
		
			
				|  |  |  });
 | 
	
		
			
				|  |  | +const tableData = computed(() => {
 | 
	
		
			
				|  |  | +  return getTableData();
 | 
	
		
			
				|  |  | +});
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  async function handleSubmitImport(file: File) {
 | 
	
		
			
				|  |  |    const { error } = await fetchImportGoods({ file });
 | 
	
	
		
			
				|  | @@ -229,7 +265,10 @@ function handleModalPrice(row: Api.goods.ShopSku) {
 | 
	
		
			
				|  |  |    openPriceModal();
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  function handleAddPrice() {
 | 
	
		
			
				|  |  | -  if (PriceData.value.length == 3) return;
 | 
	
		
			
				|  |  | +  if (PriceData.value.length == 3) {
 | 
	
		
			
				|  |  | +    window.$message?.error('最多只能添加3条数据');
 | 
	
		
			
				|  |  | +    return;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |    PriceData.value.push({
 | 
	
		
			
				|  |  |      channelId: undefined,
 | 
	
		
			
				|  |  |      channelProdPrice: 1,
 | 
	
	
		
			
				|  | @@ -240,7 +279,7 @@ function handleDelPrice(id: number) {
 | 
	
		
			
				|  |  |    PriceData.value = PriceData.value.filter(item => item.id != id);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -function handleSubmitPrice() {
 | 
	
		
			
				|  |  | +async function handleSubmitPrice() {
 | 
	
		
			
				|  |  |    setSubModalLoding(false);
 | 
	
		
			
				|  |  |    if (!PriceData.value.length) {
 | 
	
		
			
				|  |  |      window.$message?.error('最少填写一条数据');
 | 
	
	
		
			
				|  | @@ -251,7 +290,27 @@ function handleSubmitPrice() {
 | 
	
		
			
				|  |  |      return;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    setSubModalLoding(true);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +  const form = {
 | 
	
		
			
				|  |  | +    shopId: selectData.value?.shopId,
 | 
	
		
			
				|  |  | +    skuId: selectData.value?.skuId,
 | 
	
		
			
				|  |  | +    purchasePrice: selectData.value?.channelProdList?.length ? selectData.value.channelProdList[0].purchasePrice : null,
 | 
	
		
			
				|  |  | +    deliveryPrice: selectData.value?.channelProdList?.length ? selectData.value.channelProdList[0].deliveryPrice : null,
 | 
	
		
			
				|  |  | +    setChannelPriceDtoList: PriceData.value.map(item => {
 | 
	
		
			
				|  |  | +      return {
 | 
	
		
			
				|  |  | +        channelId: item.channelId,
 | 
	
		
			
				|  |  | +        channelProdPrice: item.channelProdPrice
 | 
	
		
			
				|  |  | +      };
 | 
	
		
			
				|  |  | +    })
 | 
	
		
			
				|  |  | +  };
 | 
	
		
			
				|  |  | +  const { error } = await fetchSetUpChannels(form);
 | 
	
		
			
				|  |  | +  if (!error) {
 | 
	
		
			
				|  |  | +    closePriceModal();
 | 
	
		
			
				|  |  | +    refresh();
 | 
	
		
			
				|  |  | +    PriceData.value = [];
 | 
	
		
			
				|  |  | +    options.value.map(it => (it.disabled = false));
 | 
	
		
			
				|  |  | +  } else {
 | 
	
		
			
				|  |  | +    setSubModalLoding(false);
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  |    console.log(PriceData.value, 'asdsad');
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  async function getData() {
 | 
	
	
		
			
				|  | @@ -272,7 +331,7 @@ getData();
 | 
	
		
			
				|  |  |        <template #prefix>
 | 
	
		
			
				|  |  |          <NSpace>
 | 
	
		
			
				|  |  |            <NButton size="small" @click="openImportModal">导入商品销售渠道及价格</NButton>
 | 
	
		
			
				|  |  | -          <NButton size="small">导出全部</NButton>
 | 
	
		
			
				|  |  | +          <NButton size="small" :disabled="tableData.length == 0">导出全部</NButton>
 | 
	
		
			
				|  |  |            <NButton size="small" :disabled="isDisabledExport">导出选中数据</NButton>
 | 
	
		
			
				|  |  |            <NButton size="small">修改记录</NButton>
 | 
	
		
			
				|  |  |          </NSpace>
 |