li.shaoyi 2 лет назад
Родитель
Сommit
80d02def47

+ 25 - 1
src/business/customs/exit.ts

@@ -103,7 +103,7 @@ export function useGZCJJCOrderDetail(selectedRow: Ermcp.GZCJJCOrderRsp) {
 
 // 出境检测申请
 export function useCJJCOrderApply(selectedRow?: Ermcp.GZCJJCOrderRsp) {
-    const { loginInfo, getFirstAccountId } = useLoginStore()
+    const { loginInfo, getFirstAccountId, getUserId } = useLoginStore()
     const { UserID, LoginID, LoginCode } = loginInfo.value
     const loading = shallowRef(false)
 
@@ -161,6 +161,30 @@ export function useCJJCOrderApply(selectedRow?: Ermcp.GZCJJCOrderRsp) {
                 })
             }
         })
+    } else {
+        // 每次申请自动带入。或者记录第一次申请成功的信息。
+        queryGZCJJCOrder({
+            data: {
+                page: 1,
+                pagesize: 1,
+                userid: getUserId(),
+            },
+            success: (res) => {
+                if (res.data.length) {
+                    const item = res.data[0]
+                    formData.GZCJAccountType = item.gzcjaccounttype
+                    formData.GZCJAccount = item.gzcjaccount
+                    formData.CompanyNameCN = item.companynamecn
+                    formData.CompanyNameEn = item.companynameen
+                    formData.AddressCN = item.addresscn
+                    formData.AddressEN = item.addressen
+                    formData.ContactName = item.contactname
+                    formData.ContactPosition = item.contactposition
+                    formData.ContactPhoneNo = item.contactphoneno
+                    formData.Email = item.email
+                }
+            },
+        })
     }
 
     const formSubmit = () => {

+ 2 - 2
src/business/trade/listing.ts

@@ -17,7 +17,7 @@ import {
     getSymmetryTypeList,
     getFluorescenceTypeList,
     getCrystalTypeList,
-    getFancyColorType1List,
+    getFancyColorType3List,
     getStyleTypeList,
 } from '@/constants/diamond'
 import moment from 'moment'
@@ -65,7 +65,7 @@ export function useBuyOrderListing() {
         symmetryTypeList: getSymmetryTypeList(),
         fluorescenceTypeList: getFluorescenceTypeList(),
         crystalTypeList: getCrystalTypeList(),
-        fancyColorType1List: getFancyColorType1List(),
+        fancyColorType3List: getFancyColorType3List(),
         styleTypeList: getStyleTypeList(),
     }
 

+ 9 - 1
src/packages/pc/components/base/upload/index.vue

@@ -25,7 +25,7 @@ import service from '@/services'
 
 const props = defineProps({
     fileTypes: {
-        type: Array as PropType<readonly ('image' | 'pdf')[]>,
+        type: Array as PropType<readonly ('image' | 'pdf' | 'word' | 'excel')[]>,
         default: () => ([])
     },
     limit: {
@@ -62,6 +62,14 @@ const uploadTypes = props.fileTypes.reduce((res, value) => {
             res.push('application/pdf')
             break
         }
+        case 'word': {
+            res.push('application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document')
+            break
+        }
+        case 'excel': {
+            res.push('application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
+            break
+        }
     }
     return res
 }, [] as string[])

+ 28 - 25
src/packages/pc/router/historyRouter.ts

@@ -9,15 +9,17 @@ interface HistoryStack {
 }
 
 interface HistoryState {
-    history: HistoryStack[]; // 已访问的路由列表
+    historyStacks: HistoryStack[]; // 已访问的路由列表
     historyIndex: number; // 当前历史索引位置
     excludeViews: string[]; // 不缓存的页面
     actionName: '' | 'push' | 'replace' | 'forward' | 'back'; // 当前路由动作
 }
 
 export default new (class {
+    private storageKey = 'pc@' + window.location.hostname;
+
     private _state = ref<HistoryState>({
-        history: [],
+        historyStacks: [],
         historyIndex: 0,
         excludeViews: [],
         actionName: '',
@@ -27,7 +29,7 @@ export default new (class {
     state;
 
     constructor() {
-        const state = sessionStorage.getItem('historyState');
+        const state = sessionStorage.getItem(this.storageKey);
         if (state) {
             const data: HistoryState = JSON.parse(state);
             this._state.value = data;
@@ -43,7 +45,7 @@ export default new (class {
     create = (options: RouterOptions) => {
         const router = createRouter(options);
         const { push, replace, go, forward, back } = router;
-        const { actionName } = toRefs(this._state.value);
+        const { actionName, excludeViews } = toRefs(this._state.value);
 
         // 添加
         router.push = (to: RouteRecordRaw) => {
@@ -81,16 +83,17 @@ export default new (class {
         }
 
         router.beforeResolve((to) => {
-            this.addHistory({
-                name: to.name || to.path,
-                title: to.meta.title as string ?? '标签页',
-                fullPath: to.fullPath,
-                redirected: !!to.redirectedFrom,
-            });
+            if (to.meta.keepAlive) {
+                this.addHistory({
+                    name: to.name || to.path,
+                    title: to.meta.title as string ?? '标签页',
+                    fullPath: to.fullPath,
+                    redirected: !!to.redirectedFrom,
+                });
+            }
         })
 
         router.afterEach(() => {
-            const { excludeViews } = toRefs(this._state.value);
             excludeViews.value = [];
         })
 
@@ -102,34 +105,34 @@ export default new (class {
      * @param route 
      */
     private addHistory = (route: HistoryStack) => {
-        const { history, historyIndex, excludeViews, actionName } = toRefs(this._state.value);
-        const index = history.value.findIndex((e) => e.name === route.name);
+        const { historyStacks, historyIndex, excludeViews, actionName } = toRefs(this._state.value);
+        const index = historyStacks.value.findIndex((e) => e.name === route.name);
 
         if (index > -1) {
-            history.value[index] = route;
+            historyStacks.value[index] = route;
             historyIndex.value = index;
         } else {
             if (actionName.value === 'replace') {
-                const lastIndex = history.value.length - 1;
-                const lastView = history.value[lastIndex];
+                const lastIndex = historyStacks.value.length - 1;
+                const lastView = historyStacks.value[lastIndex];
 
                 if (lastView) {
                     excludeViews.value.push(lastView.name as string);
-                    history.value[lastIndex] = route; // 更新最后一条记录
+                    historyStacks.value[lastIndex] = route; // 更新最后一条记录
                 } else {
-                    history.value.push(route);
+                    historyStacks.value.push(route);
                 }
             } else {
                 // 忽略重定向的页面
                 if (!route.redirected) {
-                    history.value.push(route);
-                    historyIndex.value = history.value.length - 1;
+                    historyStacks.value.push(route);
+                    historyIndex.value = historyStacks.value.length - 1;
                 }
             }
         }
 
         actionName.value = '';
-        sessionStorage.setItem('historyState', JSON.stringify(this._state.value));
+        sessionStorage.setItem(this.storageKey, JSON.stringify(this._state.value));
     }
 
     /**
@@ -138,13 +141,13 @@ export default new (class {
      */
     removeHistory = (routeName?: string) => {
         if (routeName) {
-            const { history, excludeViews } = toRefs(this._state.value);
-            const index = history.value.findIndex((e) => e.name === routeName);
+            const { historyStacks, excludeViews } = toRefs(this._state.value);
+            const index = historyStacks.value.findIndex((e) => e.name === routeName);
             excludeViews.value.push(routeName);
 
             if (index > -1) {
-                history.value.splice(index, 1);
-                sessionStorage.setItem('historyState', JSON.stringify(this._state.value));
+                historyStacks.value.splice(index, 1);
+                sessionStorage.setItem(this.storageKey, JSON.stringify(this._state.value));
             }
         }
     }

+ 1 - 1
src/packages/pc/router/index.ts

@@ -55,7 +55,7 @@ const router = createRouter({
 router.beforeEach((to, from, next) => {
     const isLoginOrRegister = to.name === 'login' || to.name === 'register';
     const title = to.meta.title;
-    document.title = title ? `广钻钻石交易中心 - ${title}` : '广钻钻石交易中心';
+    document.title = title ? `广州钻石交易中心 - ${title}` : '广州钻石交易中心';
 
     // 判断服务是否加载完成
     if (service.isReady) {

+ 2 - 2
src/packages/pc/views/customs/bonded/components/upload-bill/index.vue

@@ -12,9 +12,9 @@
                 </el-select>
             </el-form-item>
             <el-form-item label="发货单" prop="FileDetails">
-                <app-upload :limit="5" :file-types="['pdf']" @change="onUploadChange">
+                <app-upload :limit="5" :file-types="['pdf', 'word', 'excel']" @change="onUploadChange">
                     <template #tip>
-                        <span>支持pdf格式</span>
+                        <span>支持Word、excel、pdf格式</span>
                     </template>
                 </app-upload>
             </el-form-item>

+ 2 - 1
src/packages/pc/views/mine/address/components/edit/index.vue

@@ -63,7 +63,8 @@ const formRules: FormRules = {
         {
             required: true,
             validator: (rule, value, callback) => {
-                if (formData.ProvinceID && formData.CityID && formData.DistrictID) {
+                const ids = [10, 18, 34] // 香港、台湾、澳门没有市区选择
+                if ((formData.ProvinceID && formData.CityID && formData.DistrictID) || ids.includes(formData.ProvinceID ?? 0)) {
                     callback()
                 } else {
                     callback(new Error('请选择收货地区'))

+ 1 - 1
src/packages/pc/views/trade/purchase/components/add/index.vue

@@ -39,7 +39,7 @@
                     v-model="formData.ZSClarityType" />
             </el-form-item>
             <el-form-item label="彩钻颜色" prop="ZSCZColor1Type" v-if="formData.ZSCategory === Category.Fancy">
-                <app-multiple class="el-form-item--col" :data-list="enums.fancyColorType1List"
+                <app-multiple class="el-form-item--col" :data-list="enums.fancyColorType3List"
                     v-model="formData.ZSCZColor1Type" />
             </el-form-item>
             <el-form-item label="颜色" prop="ZSColorType" v-else>

+ 7 - 1
src/packages/pc/views/warehousing/goods/components/edit/fancy.vue

@@ -58,6 +58,12 @@
                 </el-select>
             </div>
         </el-form-item>
+        <el-form-item label="切工" prop="ZSCutType1" v-if="shapeId === 1">
+            <el-select v-model="formData.ZSCutType1" clearable>
+                <el-option :label="item.label" :value="item.value" v-for="(item, index) in enums.cutTypeList"
+                    :key="index" />
+            </el-select>
+        </el-form-item>
         <el-form-item label="净度" prop="ZSClarityType1">
             <el-select v-model="formData.ZSClarityType1">
                 <el-option :label="item.label" :value="item.value" v-for="(item, index) in enums.clarityTypeList"
@@ -166,7 +172,7 @@ const formRules: FormRules = {
     ZSCZColorType: [{
         required: true,
         validator: (rule, value, callback) => {
-            if (formData.ZSCZColor1Type && formData.ZSCZColor2Type && formData.ZSCZColor3Type) {
+            if (formData.ZSCZColor3Type) {
                 callback()
             } else {
                 callback(new Error('请选择颜色'))

+ 2 - 1
src/packages/pc/views/warehousing/warehouse/components/edit/index.vue

@@ -66,7 +66,8 @@ const formRules: FormRules = {
         {
             required: true,
             validator: (rule, value, callback) => {
-                if (formData.provinceid && formData.cityid && formData.districtid) {
+                const ids = [10, 18, 34] // 香港、台湾、澳门没有市区选择
+                if ((formData.provinceid && formData.cityid && formData.districtid) || ids.includes(formData.provinceid ?? 0)) {
                     callback()
                 } else {
                     callback(new Error('请选择仓库地区'))

+ 38 - 24
src/stores/@next.ts

@@ -1,26 +1,27 @@
-import { reactive, toRefs, UnwrapNestedRefs } from 'vue'
+import { reactive, toRefs, ToRefs, UnwrapNestedRefs } from 'vue'
 
 type Getters<T> = {
     [key in keyof T]: () => void
 }
 
-interface Store<S extends object, G extends Getters<G>, A extends object, M extends object> {
+interface Store<S extends object, G extends Getters<G>, A extends object> {
     state: UnwrapNestedRefs<S>;
-    //getters: { [key in keyof G]: ComputedRef<ReturnType<G[key]>> };
     getters: { readonly [key in keyof G]: ReturnType<G[key]> };
     actions: A;
-    methods: M;
+    methods: {
+        $setData: (callback: (state: UnwrapNestedRefs<S>) => void) => void;
+        $storeToRefs: () => ToRefs<UnwrapNestedRefs<S>>;
+    };
 }
 
 /**
  * 存储配置项
  */
-interface StoreOptions<S extends object, G extends Getters<G>, A extends object, M extends object> {
+interface StoreOptions<S extends object, G extends Getters<G>, A extends object> {
     state: () => S;
-    created?: (context: Store<S, G, A, M>) => void;
-    getters?: G & ThisType<Store<S, G, A, M>>;
-    actions?: A & ThisType<Store<S, G, A, M>>;
-    methods?: M & ThisType<Store<S, G, A, M>>;
+    created?: (context: Store<S, G, A>) => void;
+    getters?: G & ThisType<Store<S, G, A>>;
+    actions?: A & ThisType<Store<S, G, A>>;
 }
 
 /**
@@ -28,35 +29,49 @@ interface StoreOptions<S extends object, G extends Getters<G>, A extends object,
  * @param options 
  * @returns 
  */
-export function createStore<S extends object, G extends Getters<G>, A extends object, M extends object>(options: StoreOptions<S, G, A, M>) {
+export function createStore<S extends object, G extends Getters<G>, A extends object>(options: StoreOptions<S, G, A>) {
     const state = reactive(options.state())
-    const getters = (options.getters ?? {}) as { readonly [key in keyof G]: ReturnType<G[key]> }
-    const actions = (options.actions ?? {}) as { [key in keyof A]: A[key] }
-    const methods = (options.methods ?? {}) as { [key in keyof M]: M[key] }
+    const getters = {} as { readonly [key in keyof G]: ReturnType<G[key]> }
+    const actions = {} as { [key in keyof A]: A[key] }
 
-    const store: Store<S, G, A, M> = {
+    const store: Store<S, G, A> = {
         state,
         getters,
         actions,
         methods: {
-            $setData: (callback: (state: UnwrapNestedRefs<S>) => void) => {
+            $setData: (callback) => {
                 callback(state)
             },
             $storeToRefs: () => {
                 return toRefs(state)
             },
-            ...methods
         },
     }
 
-    for (const key in actions) {
-        const fn = actions[key]
-        if (fn instanceof Function) {
-            actions[key] = fn.bind(store)
+    if (options.getters) {
+        for (const key in options.getters) {
+            const fn = options.getters[key]
+            const prop = {
+                get() {
+                    return fn.call(store)
+                }
+            }
+            Object.defineProperty(getters, key, prop)
         }
     }
 
-    options.created && options.created(store)
+    if (options.actions) {
+        for (const key in options.actions) {
+            const fn = options.actions[key]
+            if (fn instanceof Function) {
+                actions[key] = fn.bind(store)
+            }
+        }
+    }
+
+    if (options.created) {
+        options.created(store)
+    }
 
     return store
 }
@@ -76,10 +91,9 @@ const store = createStore({
     actions: {
         getAllEnumList(userid: number) {
             this.state.id = userid
-            this.actions.hello()
         },
         hello() {
-            console.log('hello world')
+            console.log(this.getters.getUserid)
         }
     },
 })
@@ -88,7 +102,7 @@ store.actions.getAllEnumList(10086)
 
 setTimeout(() => {
     console.log(store.state)
-    console.log(store.getters.getUserid)
+    store.actions.hello()
 }, 2000);
 
 

+ 3 - 1
src/stores/index.ts

@@ -44,4 +44,6 @@ export function useStore() {
         performanceStore: usePerformanceStore(),
         exrateStore: useExrateStore(),
     }
-}
+}
+
+import './@next.ts'