tangning преди 3 години
родител
ревизия
e1389aa54d

+ 11 - 0
src/api/order/list.ts

@@ -6,10 +6,12 @@ import {
   ExportExcelParams,
   ExportExcelModel,
 } from './model';
+import type { Result } from '/#/axios';
 
 enum Api {
   pageList = '/basic-api/order/list',
   getOrderInfo = '/basic-api/order/info',
+  prderConfirm = '/basic-api/order/confirm',
   shippingList = '/basic-api/shipping/list',
   brandList = '/basic-api/brand/queryAll',
   sendGoods = '/basic-api/order/sendGoods',
@@ -77,3 +79,12 @@ export const exportExcelApi = (params: ExportExcelParams) =>
       ignoreCancelToken: true,
     },
   });
+export const confirmOrder = (params: OrderInfoParams) =>
+  defHttp.post<Result>({
+    url: Api.prderConfirm,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });

+ 0 - 82
src/api/product/list.ts

@@ -1,82 +0,0 @@
-import { defHttp } from '/@/utils/http/axios';
-import { PageParams, RentListGetResultModel } from './model';
-import { Result } from '/#/axios';
-
-enum Api {
-  pageList = '/basic-api/goods/list',
-  ref = '/basic-api/specification/list',
-  unSale = '/basic-api/goods/unSale',
-  enSale = '/basic-api/goods/enSale',
-  delete = '/basic-api/goods/delete',
-  info = '/basic-api/goods/info/',
-  update = '/basic-api/goods/update',
-  queryAll = '/basic-api/specification/queryAll',
-}
-
-/**
- * @description: Get sample list value
- */
-
-export const queryAll = (params?: PageParams) =>
-  defHttp.post<RentListGetResultModel>({
-    url: Api.queryAll,
-    params,
-    headers: {
-      // @ts-ignore
-      ignoreCancelToken: true,
-    },
-  });
-export const ListApi = (params: PageParams) =>
-  defHttp.post<RentListGetResultModel>({
-    url: Api.pageList,
-    params,
-    headers: {
-      // @ts-ignore
-      ignoreCancelToken: true,
-    },
-  });
-export const InfoApi = (params: string) =>
-  defHttp.post<any>({
-    url: Api.info + params,
-    headers: {
-      // @ts-ignore
-      ignoreCancelToken: true,
-    },
-  });
-export const UnSaleApi = (params: string[]) =>
-  defHttp.post<Result>({
-    url: Api.unSale,
-    data: params.join(','),
-    headers: {
-      // @ts-ignore
-      ignoreCancelToken: true,
-    },
-  });
-
-export const UpdateSaleApi = (params: any) =>
-  defHttp.post<Result>({
-    url: Api.update,
-    data: params,
-    headers: {
-      // @ts-ignore
-      ignoreCancelToken: true,
-    },
-  });
-export const EnSaleApi = (params: string[]) =>
-  defHttp.post<Result>({
-    url: Api.enSale,
-    data: params.join(','),
-    headers: {
-      // @ts-ignore
-      ignoreCancelToken: true,
-    },
-  });
-export const DeleteApi = (params: string[]) =>
-  defHttp.post<Result>({
-    url: Api.delete,
-    params,
-    headers: {
-      // @ts-ignore
-      ignoreCancelToken: true,
-    },
-  });

+ 83 - 0
src/api/staff/list.ts

@@ -0,0 +1,83 @@
+import { defHttp } from '/@/utils/http/axios';
+import { PageParams, ListGetResultModel, DelParams } from './model';
+import { Result } from '/#/axios';
+
+enum Api {
+  pageList = '/zfb-api/zfb/shop/sys/user/staffList',
+  preDel = '/zfb-api/zfb/shop/sys/user/preDeleteStaff',
+  roleList = '/zfb-api/zfb/shop/sys/user/roleList',
+  staffSave = '/zfb-api/zfb/shop/sys/user/staffSave',
+  update = '/zfb-api/zfb/shop/sys/user/update',
+  checkUser = '/zfb-api/zfb/user/checkUserExists',
+  deleteStaff = '/zfb-api/zfb/shop/sys/user/deleteStaff',
+}
+
+/**
+ * @description: Get sample list value
+ */
+
+export const ListApi = (params: PageParams) =>
+  defHttp.post<ListGetResultModel>({
+    url: Api.pageList,
+    params,
+    data: params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+export const delApi = (params: DelParams) =>
+  defHttp.post<Result>({
+    url: Api.deleteStaff,
+    params: { userId: params },
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+export const preDelApi = (params: number) =>
+  defHttp.post<Result>({
+    url: Api.preDel,
+    params: { userId: params },
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+export const roleLIstApi = (params) =>
+  defHttp.post<Result>({
+    url: Api.roleList,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+export const checkUserApi = (params) =>
+  defHttp.post<boolean>({
+    url: Api.checkUser,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+
+export const saveApi = (params) =>
+  defHttp.post<Result>({
+    url: Api.staffSave,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });
+export const updateApi = (params) =>
+  defHttp.post<Result>({
+    url: Api.update,
+    params,
+    headers: {
+      // @ts-ignore
+      ignoreCancelToken: true,
+    },
+  });

+ 1 - 0
src/locales/lang/zh-CN/modal.ts

@@ -1,3 +1,4 @@
 export default {
   atLeastOne: '请至少选择一项',
+  onatLeastOne: '请选择一项',
 };

+ 39 - 0
src/router/routes/modules/advertisement.ts

@@ -0,0 +1,39 @@
+import type { AppRouteModule } from '/@/router/types';
+
+import { LAYOUT } from '/@/router/constant';
+import { t } from '/@/hooks/web/useI18n';
+
+const advertisement: AppRouteModule = {
+  path: '/advertisement',
+  name: 'advertisement',
+  component: LAYOUT,
+  redirect: '/advertising/list',
+  meta: {
+    // hideChildrenInMenu: true,
+    icon: 'ri:advertisement-fill',
+    title: t('routes.dashboard.advertisement'),
+    orderNo: 101,
+  },
+  children: [
+    {
+      path: 'list',
+      name: 'advertisementList',
+      component: () => import('/@/views/advertisement/list.vue'),
+      meta: {
+        title: t('routes.dashboard.advertisementList'),
+        icon: 'mdi:view-gallery',
+      },
+    },
+    {
+      path: 'pads/:type',
+      name: 'advertisementPads',
+      component: () => import('/@/views/advertisement/pads.vue'),
+      meta: {
+        title: t('routes.dashboard.advertisementPads'),
+        icon: 'ic:baseline-recommend',
+      },
+    },
+  ],
+};
+
+export default advertisement;

+ 11 - 3
src/views/advertisement/pads.vue

@@ -30,7 +30,7 @@
         />
       </template>
     </BasicTable>
-    <PadsDrawer @register="registerDrawer" />
+    <PadsDrawer @register="registerDrawer" @reload="reload" />
   </div>
 </template>
 <script lang="ts">
@@ -42,12 +42,16 @@
   import { RecommendListApi } from '/@/api/advertisement/list';
   import { useDrawer } from '/@/components/Drawer';
   import { Time } from '/@/components/Time';
+  import { useRoute } from 'vue-router';
   // param type 2
   export default defineComponent({
     components: { BasicTable, TableAction, TableImg, PadsDrawer },
     setup() {
       const { createMessage } = useMessage();
       const [registerDrawer, { openDrawer }] = useDrawer();
+      const route = useRoute();
+      console.log('searchForm', route, route.fullPath);
+      const type = route.fullPath.charAt(route.fullPath.length - 1) || 1;
       const columns: BasicColumn[] = [
         {
           title: '序号',
@@ -131,12 +135,15 @@
         title: '推荐位',
         api: RecommendListApi,
         columns: columns,
-        useSearchForm: true,
-        formConfig: searchForm,
+        // useSearchForm: true,
+        // formConfig: searchForm,
         showTableSetting: true,
         tableSetting: { fullScreen: true },
         showIndexColumn: false,
         rowKey: 'id',
+        searchInfo: {
+          type,
+        },
       });
       function handleCreate() {
         openDrawer(true, {
@@ -157,6 +164,7 @@
         registerDrawer,
         handleCreate,
         handleEdit,
+        reload,
       };
     },
   });

+ 1 - 0
src/views/advertisement/padsDrawer.vue

@@ -13,6 +13,7 @@
 
   export default defineComponent({
     components: { BasicDrawer, BasicForm },
+    emits: ['reload'],
     setup(_, { emit }) {
       const { createMessage } = useMessage();
       const modelRef = ref({});

+ 29 - 4
src/views/advertisement/schemas.ts

@@ -3,6 +3,7 @@ import { FormSchema } from '/@/components/Form';
 import { Tinymce } from '/@/components/Tinymce/index';
 import { h } from 'vue';
 import { uploadApi } from '/@/api/advertisement/list';
+import { BrandListApi } from '/@/api/order/list';
 
 export const padsSchemas: FormSchema[] = [
   {
@@ -29,13 +30,34 @@ export const padsSchemas: FormSchema[] = [
   },
   {
     field: 'connectId',
-    component: 'Input',
-    label: '链接ID',
+    label: '直播ID',
+    component: 'ApiSelect',
     componentProps: {
-      placeholder: '链接',
+      api: BrandListApi,
+      // resultField: 'list',
+      numberToString: true,
+      labelField: 'name',
+      valueField: 'id',
+      immediate: true,
+      params: {
+        page: 1,
+        limit: 1000,
+      },
+    },
+    colProps: {
+      xl: 5,
+      xxl: 5,
     },
-    // required: true,
   },
+  // {
+  //   field: 'connectId',
+  //   component: 'Input',
+  //   label: '链接ID',
+  //   componentProps: {
+  //     placeholder: '链接',
+  //   },
+  //   // required: true,
+  // },
   {
     field: 'image',
     component: 'Upload',
@@ -94,6 +116,9 @@ export const schemas: FormSchema[] = [
     component: 'Upload',
     label: '封面图',
     rules: [{ required: true, message: '请选择上传文件' }],
+    itemProps: {
+      validateTrigger: 'blur',
+    },
     componentProps: {
       api: uploadApi,
       maxNumber: 1,

+ 8 - 3
src/views/order/list.vue

@@ -349,10 +349,15 @@
       function sendPackage(record: Recordable) {
         openConfirmModal(true, record);
       }
-      function handleConfirmReceive() {
+      async function handleConfirmReceive() {
         const keys = getSelectRowKeys();
-        if (keys.length === 0) {
-          createMessage.info(t('modal.atLeastOne'));
+        if (keys.length === 1) {
+          // const { id,brandId} = keys[0]
+          // await confirmOrder({
+          //   id,brandId
+          // })
+        } else {
+          createMessage.info(t('modal.onatLeastOne'));
           return;
         }
       }

+ 2 - 3
src/views/order/printModal.vue

@@ -29,7 +29,7 @@
         <div>¥{{ record.retailPrice }} </div>
       </template>
       <template #marketPrice="{ record }">
-        <div>¥{{ record.marketPrice }} </div>
+        <div>¥{{ record.number * record.retailPrice }} </div>
       </template>
     </BasicTable>
 
@@ -82,7 +82,7 @@
         },
         {
           title: '总价',
-          dataIndex: 'marketPrice',
+          dataIndex: 'totalPrice',
           ellipsis: false,
           width: 180,
           slots: { customRender: 'marketPrice' },
@@ -122,7 +122,6 @@
         modalRecord.addTime = data.addTime;
         modalRecord.goodsPrice = data.goodsPrice;
         // modalRecord.brandId = data.brandId;
-
         nextTick(() => {
           setTableData(cloneDeep(data.goodsList));
           redoHeight();

+ 6 - 0
src/views/product/drawer.data.ts

@@ -99,6 +99,9 @@ export const formSchema: FormSchema[] = [
     component: 'Upload',
     label: '主图',
     rules: [{ required: true, message: '请选择上传文件' }],
+    itemProps: {
+      validateTrigger: 'blur',
+    },
     componentProps: {
       api: uploadApi,
       maxNumber: 1,
@@ -113,6 +116,9 @@ export const formSchema: FormSchema[] = [
     field: 'listPicUrl',
     component: 'Upload',
     label: '列表图',
+    itemProps: {
+      validateTrigger: 'blur',
+    },
     rules: [{ required: true, message: '请选择上传文件' }],
     componentProps: {
       api: uploadApi,

+ 3 - 0
src/views/product/goodsSpecs.vue

@@ -134,6 +134,9 @@
             colProps: {
               span: 10,
             },
+            itemProps: {
+              validateTrigger: 'blur',
+            },
             componentProps: {
               api: uploadApi,
               maxgoodsNumber: 1,

+ 10 - 2
src/views/product/productDrawer.vue

@@ -52,9 +52,10 @@
   import { formSchema } from './drawer.data';
   import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
   import goodsSpecs from './goodsSpecs.vue';
-  import { InfoApi, UpdateSaleApi } from '/@/api/product/list';
+  import { InfoApi, UpdateSaleApi, SaveSaleApi } from '/@/api/product/list';
   import { useMessage } from '/@/hooks/web/useMessage';
   import { useI18n } from '/@/hooks/web/useI18n';
+  // import { useUserStore } from '/@/store/modules/user';
   // import { getMenuList } from '/@/api/system/system';
   import { makeTree, TreeNode } from '/@/utils/treeUtils';
   import { categoryApi } from '/@/api/product/category';
@@ -93,6 +94,7 @@
       const isUpdate = ref(true);
       const goodsRef = ref();
       const { createMessage } = useMessage();
+      const userinfo = computed(() => userStore.getUserInfo);
       const { t } = useI18n();
 
       let editData = ref<EditDataType>({
@@ -176,6 +178,7 @@
       const getTitle = computed(() => (!unref(isUpdate) ? '新增商品' : '编辑商品'));
 
       async function handleSubmit() {
+        const { companyId, id } = userinfo.value;
         try {
           const values = await validate();
           console.log('values', values);
@@ -183,7 +186,12 @@
             ...editData.value,
             ...values,
           };
-          let subData = await UpdateSaleApi({
+          let requresApi = isUpdate.value ? UpdateSaleApi : SaveSaleApi;
+          if (!isUpdate.value) {
+            apiData.createUserDeptId = companyId;
+            apiData.createUserId = id;
+          }
+          let subData = await requresApi({
             ...apiData,
             primaryPicUrl: apiData.primaryPicUrl[0],
             listPicUrl: apiData.listPicUrl[0],

+ 15 - 0
src/views/product/ref.vue

@@ -42,6 +42,15 @@
         {
           title: '商品属性',
           editRow: true,
+          editRule: async (text) => {
+            if (!text) {
+              return '请输入商品属性';
+            }
+            if (text && text.length > 25) {
+              return t('routes.corporation.maxlength');
+            }
+            return '';
+          },
           dataIndex: 'name',
           fixed: 'left',
           width: 100,
@@ -50,6 +59,12 @@
           title: '排序',
           dataIndex: 'sortOrder',
           editComponent: 'InputNumber',
+          editRule: async (text) => {
+            if (!text) {
+              return '请输入排序';
+            }
+            return '';
+          },
           editRow: true,
           width: 50,
         },

+ 1 - 1
src/views/staff/detailsModal.vue

@@ -29,7 +29,7 @@
         span: 18,
       },
       helpMessage: '手机号需在指房宝APP注册后才可新增',
-      required: true,
+      required: false,
       rules: [
         {
           required: true,

+ 3 - 3
src/views/system/account/account.data.ts

@@ -100,7 +100,7 @@ export const accountFormSchema: FormSchema[] = [
       labelField: 'roleName',
       valueField: 'roleId',
     },
-    required: true,
+    required: false,
   },
   // {
   //   field: 'dept',
@@ -127,14 +127,14 @@ export const accountFormSchema: FormSchema[] = [
     field: 'phone',
     label: '手机号',
     component: 'Input',
-    required: true,
+    required: false,
     helpMessage: ['验证提示', '手机号需在指房宝APP注册后才可新增'],
     itemProps: {
       validateTrigger: 'blur',
     },
     rules: [
       {
-        required: true,
+        required: false,
         message: '请输入手机号',
       },
       {