li.shaoyi il y a 3 ans
Parent
commit
4f9dabaa48
68 fichiers modifiés avec 797 ajouts et 499 suppressions
  1. 4 0
      README.md
  2. 27 82
      src/business/goods/index.ts
  3. 2 2
      src/business/order/desting.ts
  4. 26 13
      src/business/order/list.ts
  5. 3 3
      src/business/order/listing.ts
  6. 114 3
      src/business/search/index.ts
  7. 1 1
      src/business/sign/index.ts
  8. 39 1
      src/business/table/index.ts
  9. 9 1
      src/components/base/tabs/index.less
  10. 2 2
      src/components/base/tabs/index.vue
  11. 0 0
      src/constants/chart.ts
  12. 4 2
      src/constants/client.ts
  13. 157 0
      src/constants/diamond.ts
  14. 0 141
      src/constants/enum/diamond.ts
  15. 0 49
      src/constants/enum/index.ts
  16. 0 0
      src/constants/funcode.ts
  17. 56 0
      src/constants/index.ts
  18. 0 0
      src/constants/language.ts
  19. 0 0
      src/constants/market.ts
  20. 0 0
      src/constants/menu.ts
  21. 0 0
      src/constants/theme.ts
  22. 1 1
      src/hooks/auth/index.ts
  23. 1 1
      src/hooks/echarts/candlestick/index.ts
  24. 25 25
      src/mock/router.ts
  25. 1 1
      src/packages/mobile/components/modules/echarts-kline/index.vue
  26. 1 1
      src/packages/mobile/views/order/detail/index.vue
  27. 1 6
      src/packages/pc/assets/themes/default/default.less
  28. 1 1
      src/packages/pc/components/base/drawer/index.less
  29. 2 2
      src/packages/pc/components/base/drawer/index.vue
  30. 1 1
      src/packages/pc/components/base/multiple/index.vue
  31. 17 7
      src/packages/pc/components/layouts/main/index.less
  32. 3 3
      src/packages/pc/components/layouts/main/index.vue
  33. 2 3
      src/packages/pc/components/modules/auth-operation/index.vue
  34. 1 1
      src/packages/pc/components/modules/echarts-kline/index.vue
  35. 40 0
      src/packages/pc/components/modules/goods-details/buy.vue
  36. 44 14
      src/packages/pc/components/modules/goods-details/index.vue
  37. 54 0
      src/packages/pc/components/modules/goods-details/inquiry.vue
  38. 0 30
      src/packages/pc/components/modules/trade/index.vue
  39. 1 1
      src/packages/pc/router/dynamicRouter.ts
  40. 2 2
      src/packages/pc/views/listing/buy/components/add/index.vue
  41. 5 5
      src/packages/pc/views/listing/sell/components/add/index.vue
  42. 0 44
      src/packages/pc/views/listing/sell/components/delisting/index.vue
  43. 32 0
      src/packages/pc/views/listing/sell/components/details/index.vue
  44. 2 13
      src/packages/pc/views/listing/sell/index.vue
  45. 71 1
      src/packages/pc/views/search/diamond/index.vue
  46. 4 2
      src/packages/pc/views/search/diamonds/index.vue
  47. 7 0
      src/packages/pc/views/search/fancy/index.vue
  48. 1 1
      src/packages/pc/views/search/index.vue
  49. 2 2
      src/packages/pc/views/system/menu/components/edit/index.vue
  50. 0 0
      src/packages/pc/views/warehousing/goods/components/details/index.less
  51. 0 0
      src/packages/pc/views/warehousing/goods/components/details/index.vue
  52. 2 2
      src/packages/pc/views/warehousing/goods/components/edit/diamond.vue
  53. 2 2
      src/packages/pc/views/warehousing/goods/components/edit/diamonds.vue
  54. 2 2
      src/packages/pc/views/warehousing/goods/components/edit/fancy.vue
  55. 7 7
      src/packages/pc/views/warehousing/goods/components/edit/index.vue
  56. 2 2
      src/packages/pc/views/warehousing/goods/components/edit/jewelry.vue
  57. 2 2
      src/packages/pc/views/warehousing/goods/components/edit/rough.vue
  58. 0 0
      src/packages/pc/views/warehousing/goods/index.vue
  59. 1 1
      src/packages/pc/views/warehousing/warehouse/components/edit/index.vue
  60. 2 2
      src/services/api/goods/index.ts
  61. 2 2
      src/services/api/order/index.ts
  62. 1 1
      src/services/language/index.ts
  63. 1 1
      src/services/socket/index.ts
  64. 1 1
      src/services/socket/quote/index.ts
  65. 1 1
      src/services/socket/trade/index.ts
  66. 2 2
      src/stores/modules/storage.ts
  67. 1 1
      src/types/ermcp/account.d.ts
  68. 2 2
      src/types/store/globalStorage.d.ts

+ 4 - 0
README.md

@@ -22,3 +22,7 @@ npm run lint
 
 ### Customize configuration
 See [Configuration Reference](https://cli.vuejs.org/config/).
+
+
+## 注意事项
+除 ./src/packages 文件夹内禁止引入UI组件库

+ 27 - 82
src/business/goods/index.ts

@@ -1,9 +1,10 @@
 import { shallowRef, reactive, computed } from 'vue'
 import { v4 } from 'uuid'
 import { useDataTable } from '@/hooks/datatable'
+import { getTableColumns } from '@/business/table'
 import { formatDecimal } from '@/filters'
-import { ClientType } from '@/constants/enum/client'
-import { Market } from '@/constants/enum/market'
+import { ClientType } from '@/constants/client'
+import { Market } from '@/constants/market'
 import { queryWarehouseInfo } from '@/services/api/warehouse'
 import { addZSGoods, queryDiamondList, queryDiamondDetails } from '@/services/api/goods'
 import { sessionData } from '@/stores'
@@ -25,79 +26,32 @@ import {
     getFancyColorType1List,
     getFancyColorType2List,
     getFancyColorType3List,
-} from '@/constants/enum/diamond'
+} from '@/constants/diamond'
 
 // 钻石列表相关
 export function useDiamond() {
     const { UserID } = sessionData.getValue('loginInfo')
     const { dataList, total, pageIndex, pageSize, inputList, selectList, buttonList, getQueryParam } = useDataTable<Ermcp.MyWRPositionRsp>()
     const loading = shallowRef(false)
+    const columns = getTableColumns('warehousingDiamond')
 
-    const columns = shallowRef<Ermcp.TableColumn[]>([
-        {
-            prop: 'goodsno',
-            label: '商品编号',
-            show: true,
-        },
-        {
-            prop: 'price',
-            label: '总价',
-            show: true,
-        },
-        {
-            prop: 'weight',
-            label: '总重量',
-            show: true,
-        },
-        {
-            prop: 'weightavg',
-            label: '平均单颗重量',
-            show: true,
-        },
-        {
-            prop: 'priceper',
-            label: '克拉单位',
-            show: true,
-        },
-        {
-            prop: 'ftotalqty',
-            label: '库存重量',
-            show: true,
-        },
+    selectList.value = [
         {
-            prop: 'ffreezeqty',
-            label: '冻结重量',
-            show: true,
+            label: '商品分类',
+            key: 'zscategory',
+            selectedValue: Category.Diamonds,
+            options: getCategoryList(),
         },
         {
-            prop: 'warehousenamedisplay',
             label: '仓库',
-            show: true,
-            width: 180,
-        },
-        {
-            prop: 'zsshapetypedisplay',
-            label: '形状',
-            show: true,
-            width: 200,
-        },
-        {
-            prop: 'zscolortype',
-            label: '颜色',
-            show: true,
-        },
-        {
-            prop: 'zsclaritytype',
-            label: '净度',
-            show: true,
+            key: 'warehouseid',
+            options: [],
         },
-        {
-            prop: 'operate',
-            label: '操作',
-            show: true,
-            fixed: 'right',
-        }
-    ])
+    ]
+
+    inputList.value = [
+        { label: '商品', keys: ['goodsno'] },
+    ]
 
     const getDiamondList = () => {
         const param = getQueryParam()
@@ -124,24 +78,6 @@ export function useDiamond() {
         })
     }
 
-    selectList.value = [
-        {
-            label: '商品分类',
-            key: 'zscategory',
-            selectedValue: Category.Diamonds,
-            options: getCategoryList(),
-        },
-        {
-            label: '仓库',
-            key: 'warehouseid',
-            options: [],
-        },
-    ]
-
-    inputList.value = [
-        { label: '商品', keys: ['goodsno'] },
-    ]
-
     const [reset, search] = buttonList.value
     reset.onClick = () => {
         selectList.value.forEach((e, i) => {
@@ -188,18 +124,27 @@ export function useDiamond() {
 
 // 钻石详情相关
 export function useDiamondDetails(goodsno: string) {
+    const loading = shallowRef(false)
+    const details = shallowRef<Ermcp.DiamondDetailsRsp>()
+
     const getDiamondDetails = () => {
+        loading.value = true
         return queryDiamondDetails({
             data: {
                 goodsno,
             },
             success: (res) => {
-                console.log(res.data)
+                details.value = res.data
+            },
+            complete: () => {
+                loading.value = false
             }
         })
     }
 
     return {
+        loading,
+        details,
         getDiamondDetails
     }
 }

+ 2 - 2
src/business/order/desting.ts

@@ -1,7 +1,7 @@
 import { shallowRef } from 'vue'
 import { v4 } from 'uuid'
-import { ClientType } from '@/constants/enum/client'
-import { Market } from '@/constants/enum/market'
+import { ClientType } from '@/constants/client'
+import { Market } from '@/constants/market'
 import { zsBuyOrderDesting } from '@/services/api/order'
 import { sessionData } from '@/stores'
 import moment from 'moment'

+ 26 - 13
src/business/order/list.ts

@@ -2,7 +2,7 @@ import { shallowRef } from 'vue'
 import { useDataTable } from '@/hooks/datatable'
 import { queryBuyOrder, querySellOrder, queryMyBuyOrder, queryMySellOrder, queryMyDeListing, queryMyBargainApply, queryMyDelistingApply } from '@/services/api/order'
 import { sessionData } from '@/stores'
-import { Category, getCategoryList } from '@/constants/enum/diamond'
+import { Category, getCategoryList } from '@/constants/diamond'
 
 /**
  * 求购大厅
@@ -132,54 +132,67 @@ export function useSellOrder() {
     const columns = shallowRef<Ermcp.TableColumn[]>([
         {
             prop: 'wrtradeorderid',
-            label: '委托单号',
-            width: 200,
+            label: '卖方',
             show: true,
         },
         {
             prop: 'sellusername',
-            label: '卖方',
+            label: '仓库',
             show: true,
         },
         {
             prop: 'zscategorydisplay',
-            label: '商品分类',
+            label: '形状',
             show: true,
         },
         {
             prop: 'goodsno',
-            label: '商品编号',
+            label: '颜色',
             show: true,
         },
         {
             prop: 'totalqty',
-            label: '总重量',
+            label: '净度',
             show: true,
         },
         {
             prop: 'fixedprice',
-            label: '克拉单价',
+            label: '切工',
             show: true,
         },
         {
             prop: 'remainqty',
-            label: '剩余重量',
+            label: '抛光',
             show: true,
         },
         {
             prop: 'wrtradeorderstatus',
-            label: '委托状态',
+            label: '对称',
             show: true,
         },
         {
             prop: 'ordertime',
-            label: '委托时间',
-            width: 180,
+            label: '荧光',
+            show: true,
+        },
+        {
+            prop: 'tradedate',
+            label: '尺寸',
+            show: true,
+        },
+        {
+            prop: 'tradedate',
+            label: '价格',
+            show: true,
+        },
+        {
+            prop: 'tradedate',
+            label: '克拉重量',
             show: true,
         },
         {
             prop: 'tradedate',
-            label: '交易日',
+            label: '克拉单价',
             show: true,
         },
         {

+ 3 - 3
src/business/order/listing.ts

@@ -1,8 +1,8 @@
 import { shallowRef, reactive } from 'vue'
 import { v4 } from 'uuid'
-import { ClientType } from '@/constants/enum/client'
+import { ClientType } from '@/constants/client'
 import { useDataTable } from '@/hooks/datatable'
-import { Market } from '@/constants/enum/market'
+import { Market } from '@/constants/market'
 import { queryDiamondList } from '@/services/api/goods'
 import { zsBuyOrderListing, zsSellOrderListing } from '@/services/api/order'
 import { sessionData } from '@/stores'
@@ -20,7 +20,7 @@ import {
     getCrystalTypeList,
     getFancyColorType1List,
     getStyleTypeList,
-} from '@/constants/enum/diamond'
+} from '@/constants/diamond'
 import moment from 'moment'
 import Long from 'long'
 

+ 114 - 3
src/business/search/index.ts

@@ -1,4 +1,8 @@
+import { shallowRef } from 'vue'
+import { useDataTable } from '@/hooks/datatable'
+import { searchSellOrder } from '@/services/api/order'
 import {
+    Category,
     getCurrencyTypeList,
     getShapeTypeList,
     getColorTypeList,
@@ -7,9 +11,16 @@ import {
     getPolishTypeList,
     getSymmetryTypeList,
     getFluorescenceTypeList,
-} from '@/constants/enum/diamond'
+    getCertTypeList,
+} from '@/constants/diamond'
+
+export function useSearch(category: Category) {
+    const { dataList, total, pageIndex, pageSize } = useDataTable<Ermcp.SellOrderRsp>()
+    const loading = shallowRef(false)
+    const formData = shallowRef<Ermcp.SellOrderSearchReq>({
+        zscategory: category
+    })
 
-export function useSearchForm() {
     const enums = {
         currencyTypeList: getCurrencyTypeList(),
         shapeTypeList: getShapeTypeList(),
@@ -19,9 +30,109 @@ export function useSearchForm() {
         polishTypeList: getPolishTypeList(),
         symmetryTypeList: getSymmetryTypeList(),
         fluorescenceTypeList: getFluorescenceTypeList(),
+        certTypeList: getCertTypeList(),
+    }
+
+    const columns = shallowRef<Ermcp.TableColumn[]>([
+        {
+            prop: 'wrtradeorderid',
+            label: '卖方',
+            show: true,
+        },
+        {
+            prop: 'sellusername',
+            label: '仓库',
+            show: true,
+        },
+        {
+            prop: 'zscategorydisplay',
+            label: '形状',
+            show: true,
+        },
+        {
+            prop: 'goodsno',
+            label: '颜色',
+            show: true,
+        },
+        {
+            prop: 'totalqty',
+            label: '净度',
+            show: true,
+        },
+        {
+            prop: 'fixedprice',
+            label: '切工',
+            show: true,
+        },
+        {
+            prop: 'remainqty',
+            label: '抛光',
+            show: true,
+        },
+        {
+            prop: 'wrtradeorderstatus',
+            label: '对称',
+            show: true,
+        },
+        {
+            prop: 'ordertime',
+            label: '荧光',
+            show: true,
+        },
+        {
+            prop: 'tradedate',
+            label: '尺寸',
+            show: true,
+        },
+        {
+            prop: 'tradedate',
+            label: '价格',
+            show: true,
+        },
+        {
+            prop: 'tradedate',
+            label: '克拉重量',
+            show: true,
+        },
+        {
+            prop: 'tradedate',
+            label: '克拉单价',
+            show: true,
+        },
+        {
+            prop: 'operate',
+            label: '操作',
+            show: true,
+            fixed: 'right',
+            width: 180
+        }
+    ])
+
+    const onSearch = () => {
+        loading.value = true
+        searchSellOrder({
+            data: formData.value,
+            success: (res) => {
+                dataList.value = res.data
+            },
+            fail: () => {
+                dataList.value = []
+            },
+            complete: () => {
+                loading.value = false
+            }
+        })
     }
 
     return {
-        enums
+        loading,
+        formData,
+        enums,
+        dataList,
+        columns,
+        total,
+        pageIndex,
+        pageSize,
+        onSearch
     }
 }

+ 1 - 1
src/business/sign/index.ts

@@ -1,6 +1,6 @@
 import { ref, reactive } from 'vue'
 import { v4 } from 'uuid'
-import { ClientType } from '@/constants/enum/client'
+import { ClientType } from '@/constants/client'
 import { sessionData } from '@/stores'
 import { initBaseData } from '@/business/common'
 import { login, queryLoginId } from '@/services/api/account'

+ 39 - 1
src/business/table/index.ts

@@ -34,4 +34,42 @@ export function useTableColumns(tableKey: string, operateColumn = true) {
         columns,
         updateColumns,
     }
-}
+}
+
+/**
+ * 获取表格列数据
+ * @param tableKey 
+ * @returns 
+ */
+export function getTableColumns(tableKey: string) {
+    const tableColumns = tableColumnMap.get(tableKey) ?? []
+    const columns = tableColumns.map((e) => {
+        e.show = true
+        if (e.prop === 'operate') {
+            e.fixed = 'right'
+        }
+        return e
+    })
+    return shallowRef(columns)
+}
+
+const tableColumnMap = new Map<string, Ermcp.TableColumn[]>([
+    // 我的仓储-我的库存
+    ['warehousingDiamond', [
+        { prop: 'goodsno', label: '商品编号' },
+        { prop: 'price', label: '总价' },
+        { prop: 'weight', label: '总重量' },
+        { prop: 'weightavg', label: '平均单颗重量' },
+        { prop: 'priceper', label: '克拉单位' },
+        { prop: 'ftotalqty', label: '库存重量' },
+        { prop: 'ffreezeqty', label: '冻结重量' },
+        { prop: 'warehousenamedisplay', label: '仓库', width: 180 },
+        { prop: 'zsshapetypedisplay', label: '形状', width: 200 },
+        { prop: 'zscolortype', label: '颜色' },
+        { prop: 'zsclaritytype', label: '净度' },
+        { prop: 'operate', label: '操作' }
+    ]],
+    ['aa', [
+        { prop: 'wrtradeorderid', label: '卖方' },
+    ]]
+])

+ 9 - 1
src/components/base/tabs/index.less

@@ -28,9 +28,17 @@
         display        : flex;
         align-items    : center;
         justify-content: space-between;
+
+        .tabs {
+            &-item {
+                white-space: nowrap;
+            }
+        }
     }
 
     &__container {
-        height: 100%;
+        position  : relative;
+        flex      : 1;
+        overflow-y: auto;
     }
 }

+ 2 - 2
src/components/base/tabs/index.vue

@@ -9,9 +9,9 @@
             </ul>
             <slot name="navbar"></slot>
         </div>
-        <el-scrollbar view-class="app-tabs__container" always>
+        <div class="app-tabs__container">
             <slot></slot>
-        </el-scrollbar>
+        </div>
     </div>
 </template>
 

+ 0 - 0
src/constants/enum/chart.ts → src/constants/chart.ts


+ 4 - 2
src/constants/enum/client.ts → src/constants/client.ts

@@ -1,4 +1,4 @@
-import { getEnumTypeList } from './index'
+import { getEnumTypes, getEnumTypeList } from './index'
 
 /**
  * 客户端类型
@@ -17,10 +17,12 @@ export enum ClientType {
     TradeInterface = 10 // 交易接口
 }
 
+const clientTypes = getEnumTypes('ZSCategory') // 客户端类型
+
 /**
  * 获取客户端类型列表
  * @returns 
  */
 export function getClientTypeList() {
-    return getEnumTypeList('clientType')
+    return getEnumTypeList(clientTypes)
 }

+ 157 - 0
src/constants/diamond.ts

@@ -0,0 +1,157 @@
+import { getEnumTypes, getEnumTypeInfo, getEnumTypeList } from './index'
+
+/**
+ * 钻石类型
+ */
+export enum Category {
+    Diamonds = 1, // 成批裸钻
+    Diamond = 2, // 单颗裸钻
+    Rough = 3, // 成批毛坯
+    Jewelry = 4, // 钻石首饰
+    Fancy = 5, // 彩色钻石
+}
+
+const categoryTypes = getEnumTypes('ZSCategory') // 钻石类型
+const currencyTypes = getEnumTypes('ZSCurrencyType') // 货币类型
+const colorTypes = getEnumTypes('ZSColorType') // 颜色类型
+const clarityTypes = getEnumTypes('ZSClarityType') // 净度类型
+const cutTypes = getEnumTypes('ZSCutType') // 切工类型
+const shapeTypes = getEnumTypes('ZSShapeType') // 形状类型
+const symmetryTypes = getEnumTypes('ZSSymmetryType') // 对称类型
+const polishTypes = getEnumTypes('ZSPolishType') // 抛光类型
+const fluorescenceTypes = getEnumTypes('ZSFluorescenceType') // 荧光类型
+const certTypes = getEnumTypes('ZSCertType') // 证书类型
+const crystalTypes = getEnumTypes('ZSCrystalType') // 晶型类型
+const fancyColorTypes1 = getEnumTypes('ZSCZColor1Type') // 彩钻类型1
+const fancyColorTypes2 = getEnumTypes('ZSCZColor2Type') // 彩钻类型2
+const fancyColorTypes3 = getEnumTypes('ZSCZColor3Type') // 彩钻类型3
+const styleTypes = getEnumTypes('ZSStyleType') // 款式类型
+
+/**
+ * 获取钻石分类列表
+ * @returns 
+ */
+export function getCategoryList() {
+    return getEnumTypeList(categoryTypes)
+}
+
+/**
+ * 获取货币类型列表
+ * @returns 
+ */
+export function getCurrencyTypeList() {
+    return getEnumTypeList(currencyTypes)
+}
+
+/**
+ * 获取货币类型信息
+ * @param value 
+ * @returns 
+ */
+export function getCurrencyTypeInfo(value: number) {
+    return getEnumTypeInfo(currencyTypes, value)
+}
+
+/**
+ * 获取颜色类型列表
+ * @returns 
+ */
+export function getColorTypeList() {
+    return getEnumTypeList(colorTypes)
+}
+
+/**
+ * 获取净度类型列表
+ * @returns 
+ */
+export function getClarityTypeList() {
+    return getEnumTypeList(clarityTypes)
+}
+
+/**
+ * 获取切工类型列表
+ * @returns 
+ */
+export function getCutTypeList() {
+    return getEnumTypeList(cutTypes)
+}
+
+/**
+ * 获取形状类型列表
+ * @returns 
+ */
+export function getShapeTypeList() {
+    return getEnumTypeList(shapeTypes)
+}
+
+/**
+ * 获取对称类型列表
+ * @returns 
+ */
+export function getSymmetryTypeList() {
+    return getEnumTypeList(symmetryTypes)
+}
+
+/**
+ * 获取抛光类型列表
+ * @returns 
+ */
+export function getPolishTypeList() {
+    return getEnumTypeList(polishTypes)
+}
+
+/**
+ * 获取荧光类型列表
+ * @returns 
+ */
+export function getFluorescenceTypeList() {
+    return getEnumTypeList(fluorescenceTypes)
+}
+
+/**
+ * 获取证书类型列表
+ * @returns 
+ */
+export function getCertTypeList() {
+    return getEnumTypeList(certTypes)
+}
+
+/**
+ * 获取晶型类型列表
+ * @returns 
+ */
+export function getCrystalTypeList() {
+    return getEnumTypeList(crystalTypes)
+}
+
+/**
+ * 获取彩钻类型1列表
+ * @returns 
+ */
+export function getFancyColorType1List() {
+    return getEnumTypeList(fancyColorTypes1)
+}
+
+/**
+ * 获取彩钻类型2列表
+ * @returns 
+ */
+export function getFancyColorType2List() {
+    return getEnumTypeList(fancyColorTypes2)
+}
+
+/**
+ * 获取彩钻类型3列表
+ * @returns 
+ */
+export function getFancyColorType3List() {
+    return getEnumTypeList(fancyColorTypes3)
+}
+
+/**
+ * 获取款式类型列表
+ * @returns 
+ */
+export function getStyleTypeList() {
+    return getEnumTypeList(styleTypes)
+}

+ 0 - 141
src/constants/enum/diamond.ts

@@ -1,141 +0,0 @@
-import { getEnumTypeList, getEnumTypeInfo } from './index'
-
-/**
- * 钻石类型
- */
-export enum Category {
-    Diamonds = 1, // 成批裸钻
-    Diamond = 2, // 单颗裸钻
-    Rough = 3, // 成批毛坯
-    Jewelry = 4, // 钻石首饰
-    Fancy = 5, // 彩色钻石
-}
-
-/**
- * 获取钻石分类列表
- * @returns 
- */
-export function getCategoryList() {
-    return getEnumTypeList('ZSCategory')
-}
-
-/**
- * 获取货币类型列表
- * @returns 
- */
-export function getCurrencyTypeList() {
-    return getEnumTypeList('ZSCurrencyType')
-}
-
-/**
- * 获取货币类型信息
- * @param value 
- * @returns 
- */
-export function getCurrencyTypeInfo(value: number) {
-    return getEnumTypeInfo('ZSCurrencyType', value)
-}
-
-/**
- * 获取颜色类型列表
- * @returns 
- */
-export function getColorTypeList() {
-    return getEnumTypeList('ZSColorType')
-}
-
-/**
- * 获取净度类型列表
- * @returns 
- */
-export function getClarityTypeList() {
-    return getEnumTypeList('ZSClarityType')
-}
-
-/**
- * 获取切工类型列表
- * @returns 
- */
-export function getCutTypeList() {
-    return getEnumTypeList('ZSCutType')
-}
-
-/**
- * 获取形状类型列表
- * @returns 
- */
-export function getShapeTypeList() {
-    return getEnumTypeList('ZSShapeType')
-}
-
-/**
- * 获取对称类型列表
- * @returns 
- */
-export function getSymmetryTypeList() {
-    return getEnumTypeList('ZSSymmetryType')
-}
-
-/**
- * 获取抛光类型列表
- * @returns 
- */
-export function getPolishTypeList() {
-    return getEnumTypeList('ZSPolishType')
-}
-
-/**
- * 获取荧光类型列表
- * @returns 
- */
-export function getFluorescenceTypeList() {
-    return getEnumTypeList('ZSFluorescenceType')
-}
-
-/**
- * 获取证书类型列表
- * @returns 
- */
-export function getCertTypeList() {
-    return getEnumTypeList('ZSCertType')
-}
-
-/**
- * 获取晶型类型列表
- * @returns 
- */
-export function getCrystalTypeList() {
-    return getEnumTypeList('ZSCrystalType')
-}
-
-/**
- * 获取彩钻类型1列表
- * @returns 
- */
-export function getFancyColorType1List() {
-    return getEnumTypeList('ZSCZColor1Type')
-}
-
-/**
- * 获取彩钻类型2列表
- * @returns 
- */
-export function getFancyColorType2List() {
-    return getEnumTypeList('ZSCZColor2Type')
-}
-
-/**
- * 获取彩钻类型3列表
- * @returns 
- */
-export function getFancyColorType3List() {
-    return getEnumTypeList('ZSCZColor3Type')
-}
-
-/**
- * 获取款式类型列表
- * @returns 
- */
-export function getStyleTypeList() {
-    return getEnumTypeList('ZSStyleType')
-}

+ 0 - 49
src/constants/enum/index.ts

@@ -1,49 +0,0 @@
-import { sessionData } from '@/stores'
-
-/**
- * 枚举类型
- */
-export interface EnumType {
-    label: string;
-    value: number;
-    disabled?: boolean;
-}
-
-/**
- * 获取枚举列表
- * @param code 
- * @returns 
- */
-export function getEnumTypeList(code: string) {
-    const allEnums = sessionData.getValue('allEnums')
-    const result = allEnums.filter((e) => e.enumdiccode.toLowerCase() === code.toLowerCase() && e.enumitemstatus === 1)
-    return result.map((e) => ({
-        label: e.enumdicname,
-        value: e.enumitemname,
-    }))
-}
-
-/**
- * 获取枚举信息
- * @param code 
- * @param value 
- * @returns 
- */
-export function getEnumTypeInfo(code: string, value: number) {
-    const allEnums = sessionData.getValue('allEnums')
-    return allEnums.find((e) => e.enumdiccode.toLowerCase() === code.toLowerCase() && e.enumitemstatus === 1 && e.enumitemname === value)
-}
-
-/**
- * 根据枚举值获取枚举名称
- * @param list 
- * @param value 
- * @returns 
- */
-export function getEnumTypeName(list: EnumType[], value: number) {
-    const item = list.find((e) => e.value === value)
-    if (item) {
-        return item.label
-    }
-    return '--'
-}

+ 0 - 0
src/constants/enum/funcode.ts → src/constants/funcode.ts


+ 56 - 0
src/constants/index.ts

@@ -0,0 +1,56 @@
+import { sessionData } from '@/stores'
+
+/**
+ * 枚举类型
+ */
+export interface EnumType {
+    label: string;
+    value: number;
+    disabled?: boolean;
+}
+
+/**
+ * 获取枚举类型
+ * @param code 
+ * @returns 
+ */
+export function getEnumTypes(code: string) {
+    const enums = sessionData.getValue('allEnums')
+    return enums.filter((e) => e.enumdiccode.toLowerCase() === code.toLowerCase() && e.enumitemstatus === 1)
+}
+
+/**
+ * 获取枚举信息
+ * @param enums 
+ * @param value 
+ * @returns 
+ */
+export function getEnumTypeInfo(enums: Ermcp.EnumRsp[], value: number) {
+    return enums.find((e) => e.enumitemstatus === 1 && e.enumitemname === value)
+}
+
+/**
+ * 获取枚举列表
+ * @param enums 
+ * @returns 
+ */
+export function getEnumTypeList(enums: Ermcp.EnumRsp[]): EnumType[] {
+    return enums.map((e) => ({
+        label: e.enumdicname,
+        value: e.enumitemname,
+    }))
+}
+
+/**
+ * 根据枚举值获取枚举名称
+ * @param enums 
+ * @param value 
+ * @returns 
+ */
+export function getEnumTypeName(enums: EnumType[], value: number): string {
+    const item = enums.find((e) => e.value === value)
+    if (item) {
+        return item.label
+    }
+    return '--'
+}

+ 0 - 0
src/constants/enum/language.ts → src/constants/language.ts


+ 0 - 0
src/constants/enum/market.ts → src/constants/market.ts


+ 0 - 0
src/constants/enum/menu.ts → src/constants/menu.ts


+ 0 - 0
src/constants/enum/theme.ts → src/constants/theme.ts


+ 1 - 1
src/hooks/auth/index.ts

@@ -1,7 +1,7 @@
 import { defineAsyncComponent, Component } from 'vue'
 import { useRoute, useRouter } from 'vue-router'
 import { sessionData } from '@/stores'
-import { AuthType } from '@/constants/enum/menu'
+import { AuthType } from '@/constants/menu'
 import { AuthMenu } from './interface'
 
 export function useAuth(code?: string) {

+ 1 - 1
src/hooks/echarts/candlestick/index.ts

@@ -1,6 +1,6 @@
 import { ref, computed, watch } from 'vue'
 //import { timerInterceptor } from '@/utils/timer'
-import { ChartCycleType } from '@/constants/enum/chart'
+import { ChartCycleType } from '@/constants/chart'
 import { queryHistoryDatas } from '@/services/api/quote'
 import { futuresStore } from '@/stores'
 import { useDataset } from './dataset'

+ 25 - 25
src/mock/router.ts

@@ -29,20 +29,20 @@ const appmenu = {
                     {
                         authType: 1,
                         sort: 1,
-                        title: '成批裸钻',
-                        code: 'search_diamonds',
+                        title: '单颗裸钻',
+                        code: 'search_diamond',
                         url: '',
                         urlType: 1,
-                        component: 'views/search/diamonds/index.vue',
+                        component: 'views/search/diamond/index.vue',
                     },
                     {
                         authType: 1,
                         sort: 2,
-                        title: '单颗钻',
-                        code: 'search_diamond',
-                        url: 'diamond',
+                        title: '单颗钻',
+                        code: 'search_fancy',
+                        url: 'fancy',
                         urlType: 1,
-                        component: 'views/search/diamond/index.vue'
+                        component: 'views/search/fancy/index.vue'
                     },
                 ]
             },
@@ -61,7 +61,7 @@ const appmenu = {
                         sort: 1,
                         title: '出售大厅',
                         code: 'listing_sell',
-                        url: 'sell',
+                        url: '',
                         urlType: 1,
                         component: 'views/listing/sell/index.vue',
                         children: [
@@ -75,18 +75,18 @@ const appmenu = {
                             },
                             {
                                 authType: 3,
-                                title: '摘牌',
-                                code: 'listing_sell_delisting',
-                                component: 'views/listing/sell/components/delisting/index.vue',
-                                buttonName: 'delisting',
+                                title: '详情',
+                                code: 'listing_sell_details',
+                                component: 'components/modules/goods-details/index.vue',
+                                buttonName: 'details',
                                 buttonType: 'primary',
                             },
                             {
                                 authType: 3,
-                                title: '询价',
-                                code: 'listing_sell_inquire',
-                                component: 'views/listing/sell/components/inquire/index.vue',
-                                buttonName: 'inquire',
+                                title: '收藏',
+                                code: 'listing_sell_favorite',
+                                component: 'views/listing/sell/components/favorite/index.vue',
+                                buttonName: 'favorite',
                                 buttonType: 'primary',
                             },
                         ]
@@ -96,7 +96,7 @@ const appmenu = {
                         sort: 1,
                         title: '求购大厅',
                         code: 'listing_buy',
-                        url: '',
+                        url: 'buy',
                         urlType: 1,
                         component: 'views/listing/buy/index.vue',
                         children: [
@@ -178,32 +178,32 @@ const appmenu = {
                         authType: 1,
                         sort: 1,
                         title: '我的库存',
-                        code: 'warehousing_stock',
+                        code: 'warehousing_goods',
                         url: '',
                         urlType: 1,
-                        component: 'views/warehousing/stock/index.vue',
+                        component: 'views/warehousing/goods/index.vue',
                         children: [
                             {
                                 authType: 3,
                                 title: '添加商品',
-                                code: 'warehousing_stock_add',
-                                component: 'views/warehousing/stock/components/edit/index.vue',
+                                code: 'warehousing_goods_add',
+                                component: 'views/warehousing/goods/components/edit/index.vue',
                                 buttonName: 'add',
                                 buttonType: 'primary',
                             },
                             {
                                 authType: 3,
                                 title: '商品上架',
-                                code: 'warehousing_stock_sell',
-                                component: 'views/warehousing/stock/components/edit/index.vue',
+                                code: 'warehousing_goods_sell',
+                                component: 'views/warehousing/goods/components/edit/index.vue',
                                 buttonName: 'sell',
                                 buttonType: 'primary',
                             },
                             {
                                 authType: 3,
                                 title: '详情',
-                                code: 'warehousing_stock_details',
-                                component: 'views/warehousing/stock/components/details/index.vue',
+                                code: 'warehousing_goods_details',
+                                component: 'views/warehousing/goods/components/details/index.vue',
                                 buttonName: 'details',
                                 buttonType: 'primary',
                             }

+ 1 - 1
src/packages/mobile/components/modules/echarts-kline/index.vue

@@ -25,7 +25,7 @@
 
 <script lang="ts" setup>
 import { PropType, watch } from 'vue'
-import { ChartCycleType } from '@/constants/enum/chart'
+import { ChartCycleType } from '@/constants/chart'
 import { useCandlestickChart } from '@/hooks/echarts/candlestick'
 import AppEcharts from '@/components/base/echarts/index.vue'
 

+ 1 - 1
src/packages/mobile/views/order/detail/index.vue

@@ -20,7 +20,7 @@ import { defineAsyncComponent, ref } from 'vue'
 import { onBeforeRouteLeave } from 'vue-router'
 import { Button } from 'vant'
 import { useComponent } from '@/hooks/component'
-import { ChartCycleType, getChartCycleTypeList } from '@/constants/enum/chart'
+import { ChartCycleType, getChartCycleTypeList } from '@/constants/chart'
 import AppTabs from '@/components/base/tabs/index.vue'
 
 const componentMap = new Map<string, unknown>([

+ 1 - 6
src/packages/pc/assets/themes/default/default.less

@@ -34,12 +34,7 @@
             &--col {
                 display: flex;
                 width  : 100%;
-
-                >* {
-                    &:not(:first-child) {
-                        margin-left: 10px;
-                    }
-                }
+                gap    : 10px;
             }
         }
 

+ 1 - 1
src/packages/pc/components/base/drawer/index.less

@@ -3,7 +3,7 @@
         display         : flex;
         flex-direction  : column;
         max-height      : 100vh;
-        min-width       : 320px;
+        min-width       : 360px;
         border-radius   : 4px;
         background-color: #fff;
         box-shadow      : 0 0 20px 0 rgba(0, 0, 0, .15);

+ 2 - 2
src/packages/pc/components/base/drawer/index.vue

@@ -3,7 +3,7 @@
   <app-modal class="app-drawer" :show="show" :close-on-click-mask="false" @mask="close">
     <div class="app-drawer__wrapper" v-loading="loading">
       <div class="app-drawer__header">
-        <h1>{{ title }}</h1>
+        <h1>{{  title  }}</h1>
         <el-icon @click="close">
           <Close />
         </el-icon>
@@ -30,7 +30,7 @@ defineProps({
   },
   title: {
     type: String,
-    default: '标题',
+    default: '',
   },
   loading: {
     type: Boolean,

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

@@ -21,7 +21,7 @@
 
 <script lang="ts" setup>
 import { shallowRef, watch, PropType } from 'vue'
-import { EnumType } from '@/constants/enum'
+import { EnumType } from '@/constants'
 
 const props = defineProps({
     modelValue: {

+ 17 - 7
src/packages/pc/components/layouts/main/index.less

@@ -3,13 +3,23 @@
         height: 100%;
     }
 
-    /* teleport 为空时隐藏元素 */
-    &__teleport:empty {
-        display: none;
-    }
+    &__teleport {
+        position  : absolute;
+        z-index   : 10;
+        left      : 0;
+        top       : 0;
+        width     : 100%;
+        height    : 100%;
+        overflow-y: auto;
+
+        /* teleport 为空时隐藏元素 */
+        &:empty {
+            display: none;
+        }
 
-    /* teleport 非空时隐藏兄弟元素 */
-    &__teleport:not(:empty)+&__container {
-        display: none;
+        /* teleport 非空时隐藏兄弟元素 */
+        &:not(:empty)+.el-scrollbar {
+            opacity: 0;
+        }
     }
 }

+ 3 - 3
src/packages/pc/components/layouts/main/index.vue

@@ -1,12 +1,12 @@
 <template>
     <app-tabs class="app-main" :data-list="secondMenus" v-model:data-index="dataIndex" @change="onTabChange">
-        <div id="appMainTeleport" class="app-main__container app-main__teleport"></div>
-        <div class="app-main__container">
+        <div id="appMainTeleport" class="app-main__teleport"></div>
+        <el-scrollbar view-class="app-main__container" always>
             <!-- 二级路由 -->
             <router-view v-slot="{ Component, route }">
                 <component :is="Component" :key="route.fullPath" />
             </router-view>
-        </div>
+        </el-scrollbar>
     </app-tabs>
 </template>
 

+ 2 - 3
src/packages/pc/components/modules/auth-operation/index.vue

@@ -29,9 +29,8 @@
             </el-dropdown>
             <ul v-else>
                 <li v-for="(item, index) in dataList" :key="index">
-                    <el-button :class="item.code" :type="item.buttonType"
-                        :disabled="item.disabled || item.code === componentId" @click="openComponent(item.code)"
-                        :link="linkButton">
+                    <el-button :class="item.code" :type="item.buttonType" :disabled="item.code === componentId"
+                        @click="openComponent(item.code)" :link="linkButton">
                         <el-icon v-if="item.icon">
                             <component :is="item.icon" />
                         </el-icon>

+ 1 - 1
src/packages/pc/components/modules/echarts-kline/index.vue

@@ -62,7 +62,7 @@
 <script lang="ts" setup>
 import { ref, PropType, watch } from 'vue'
 import { echarts } from '@/components/base/echarts/core'
-import { ChartCycleType, ChartSeriesType, getChartSeriesTypeList } from '@/constants/enum/chart'
+import { ChartCycleType, ChartSeriesType, getChartSeriesTypeList } from '@/constants/chart'
 import { useCandlestickChart } from '@/hooks/echarts/candlestick'
 import AppEcharts from '@/components/base/echarts/index.vue'
 import AppTabs from '@/components/base/tabs/index.vue'

+ 40 - 0
src/packages/pc/components/modules/goods-details/buy.vue

@@ -0,0 +1,40 @@
+<!-- 商品详情-立即购买 -->
+<template>
+    <app-drawer title="购买" v-model:show="show" :loading="loading">
+        <div style="font-size:16px;text-align:center">是否购买此商品?</div>
+        <template #footer>
+            <el-button @click="onCancel" plain>取消</el-button>
+            <el-button type="primary" @click="onSubmit">确认</el-button>
+        </template>
+    </app-drawer>
+</template>
+
+<script lang="ts" setup>
+import { shallowRef, PropType } from 'vue'
+import { ElMessage } from 'element-plus'
+import { useBuyOrderDesting } from '@/business/order/desting'
+import AppDrawer from '@pc/components/base/drawer/index.vue'
+
+const props = defineProps({
+    details: {
+        type: Object as PropType<Ermcp.SellOrderRsp>,
+        default: () => ({})
+    }
+})
+
+const { loading, formSubmit } = useBuyOrderDesting(props.details)
+const show = shallowRef(true)
+
+const onCancel = () => {
+    show.value = false
+}
+
+const onSubmit = () => {
+    formSubmit().then(() => {
+        ElMessage.success('提交成功')
+        onCancel()
+    }).catch((err) => {
+        ElMessage.error('提交失败:' + err)
+    })
+}
+</script>

+ 44 - 14
src/packages/pc/components/modules/goods-details/index.vue

@@ -1,38 +1,68 @@
+<!-- 商品详情 -->
 <template>
     <teleport :to="teleport">
-        <app-view class="app-details" v-loading="loading" v-bind="$attrs">
-            <slot></slot>
-            <el-button @click="onClick">返回</el-button>
+        <app-view class="app-details" v-bind="$attrs">
+            <template #header>
+                <div>
+                    <el-button @click="$emit('closed')">返回</el-button>
+                    <el-button type="primary" @click="openComponent('buy')" v-if="showButton">立即购买</el-button>
+                    <el-button type="primary" @click="openComponent('inquiry')" v-if="showButton">询价申请</el-button>
+                </div>
+            </template>
+            <template v-if="details">
+                <div class="app-details__intro">
+                    <div class="gallery">
+
+                    </div>
+                    <div class="info">
+                        <h1>商品详情</h1>
+                    </div>
+                </div>
+                <div class="rule">
+
+                </div>
+                <div class="property" style="line-height:normal">
+                    {{ details }}
+                </div>
+            </template>
         </app-view>
+        <component :is="componentMap.get(componentId)" v-bind="{ details }" @closed="closeComponent"
+            v-if="componentId" />
     </teleport>
 </template>
 
 <script lang="ts" setup>
-import { PropType } from 'vue'
+import { computed, PropType, defineAsyncComponent } from 'vue'
+import { sessionData } from '@/stores'
+import { useComponent } from '@/hooks/component'
 import { useDiamondDetails } from '@/business/goods'
 
+const componentMap = new Map<string, unknown>([
+    ['buy', defineAsyncComponent(() => import('./buy.vue'))], // 立即购买
+    ['inquiry', defineAsyncComponent(() => import('./inquiry.vue'))] // 询价申请
+])
+
 const props = defineProps({
     teleport: {
         type: String as PropType<'#appPageTeleport' | '#appMainTeleport'>,
         default: '#appMainTeleport'
     },
-    loading: {
-        type: Boolean,
-        default: false,
-    },
     goodsno: {
         type: String,
         required: true
     },
 })
 
-const emit = defineEmits(['closed'])
-
-const { getDiamondDetails } = useDiamondDetails(props.goodsno)
+const { details, getDiamondDetails } = useDiamondDetails(props.goodsno)
+const { componentId, openComponent, closeComponent } = useComponent()
 
-const onClick = () => {
-    emit('closed')
-}
+// 不能购买自己上架的商品
+const showButton = computed(() => {
+    if (details.value) {
+        return details.value.userid !== sessionData.getLoginInfo('UserID')
+    }
+    return false
+})
 
 getDiamondDetails()
 </script>

+ 54 - 0
src/packages/pc/components/modules/goods-details/inquiry.vue

@@ -0,0 +1,54 @@
+<!-- 商品详情-询价申请 -->
+<template>
+    <app-drawer title="询价" :width="600" v-model:show="show" :loading="loading">
+        <el-form ref="formRef" label-width="60px" :rules="formRules">
+            <el-form-item label="价格" prop="warehousecode">
+                <div class="el-form-item--col">
+                    <el-input placeholder="请输入" />
+                    <span style="white-space:nowrap;">汇率:6.7500</span>
+                </div>
+            </el-form-item>
+            <el-form-item label="备注" prop="Remark">
+                <el-input type="textarea" :rows="3" />
+            </el-form-item>
+        </el-form>
+        <template #footer>
+            <el-button @click="onCancel" plain>取消</el-button>
+            <el-button type="primary" @click="onSubmit">确认</el-button>
+        </template>
+    </app-drawer>
+</template>
+
+<script lang="ts" setup>
+import { ref, PropType } from 'vue'
+import { ElMessage } from 'element-plus'
+import type { FormInstance, FormRules } from 'element-plus'
+import { useBuyOrderDesting } from '@/business/order/desting'
+import AppDrawer from '@pc/components/base/drawer/index.vue'
+
+const props = defineProps({
+    details: {
+        type: Object as PropType<Ermcp.SellOrderRsp>,
+        default: () => ({})
+    }
+})
+
+const { loading, formSubmit } = useBuyOrderDesting(props.details)
+const formRef = ref<FormInstance>()
+const show = ref(true)
+
+const formRules: FormRules = {}
+
+const onCancel = () => {
+    show.value = false
+}
+
+const onSubmit = () => {
+    formSubmit().then(() => {
+        ElMessage.success('提交成功')
+        onCancel()
+    }).catch((err) => {
+        ElMessage.error('提交失败:' + err)
+    })
+}
+</script>

+ 0 - 30
src/packages/pc/components/modules/trade/index.vue

@@ -1,30 +0,0 @@
-<!-- 期货交易 -->
-<template>
-  <app-drawer v-model:show="show">
-    <template #default>
-      {{ selectedRow }}
-    </template>
-    <template #footer>
-      <el-button @click="cancel">取消</el-button>
-      <el-button @click="cancel" type="primary">提交</el-button>
-    </template>
-  </app-drawer>
-</template>
-
-<script lang="ts" setup>
-import { ref } from 'vue'
-import AppDrawer from '../../base/drawer/index.vue'
-
-defineProps({
-  selectedRow: {
-    type: Object,
-    default: () => ({})
-  }
-})
-
-const show = ref(true);
-
-const cancel = () => {
-  show.value = false;
-}
-</script>

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

@@ -1,5 +1,5 @@
 import { RouteRecordRaw } from 'vue-router'
-import { AuthType } from '@/constants/enum/menu'
+import { AuthType } from '@/constants/menu'
 import { sessionData } from '@/stores'
 import router from '../router'
 

+ 2 - 2
src/packages/pc/views/listing/buy/components/add/index.vue

@@ -85,7 +85,7 @@ import { ref, defineAsyncComponent } from 'vue'
 import { ElMessage } from 'element-plus'
 import type { FormInstance, FormRules } from 'element-plus'
 import { useBuyOrderListing } from '@/business/order/listing'
-import { Category } from '@/constants/enum/diamond'
+import { Category } from '@/constants/diamond'
 import AppDrawer from '@pc/components/base/drawer/index.vue'
 import AppMultiple from '@pc/components/base/multiple/index.vue'
 
@@ -222,7 +222,7 @@ const onSubmit = () => {
                 ElMessage.success('提交成功')
                 onCancel(true)
             }).catch((err) => {
-                ElMessage.error('提交失败:' + err)
+                ElMessage.error('提交失败' + err)
             })
         }
     })

+ 5 - 5
src/packages/pc/views/listing/sell/components/add/index.vue

@@ -16,19 +16,19 @@
             selection-type="single" border @select="onTableSelect">
             <!-- 剩余数量 -->
             <template #remainqty="{ row }">
-                {{ row.ftotalqty - row.ffreezeqty }}
+                {{  row.ftotalqty - row.ffreezeqty  }}
             </template>
             <!-- 颜色 -->
             <template #zscolortype="{ row }">
-                {{ [row.zscolortype1display, row.zscolortype2display].join('-') }}
+                {{  [row.zscolortype1display, row.zscolortype2display].join('-')  }}
             </template>
             <!-- 净度 -->
             <template #zsclaritytype="{ row }">
-                {{ [row.zsclaritytype1display, row.zsclaritytype2display].join('-') }}
+                {{  [row.zsclaritytype1display, row.zsclaritytype2display].join('-')  }}
             </template>
             <!-- 彩钻颜色 -->
             <template #zsczcolortype="{ row }">
-                {{ [row.zsczcolor1typedisplay, row.zsczcolor2typedisplay, row.zsczcolor3typedisplay].join('-') }}
+                {{  [row.zsczcolor1typedisplay, row.zsczcolor2typedisplay, row.zsczcolor3typedisplay].join('-')  }}
             </template>
         </app-table>
         <template #footer>
@@ -96,7 +96,7 @@ const onSubmit = () => {
                     ElMessage.success('提交成功')
                     onCancel(true)
                 }).catch((err) => {
-                    ElMessage.error('提交失败:' + err)
+                    ElMessage.error('提交失败' + err)
                 })
             } else {
                 ElMessage.warning('请选择商品')

+ 0 - 44
src/packages/pc/views/listing/sell/components/delisting/index.vue

@@ -1,44 +0,0 @@
-<!-- 出售大厅-我要出售-摘牌 -->
-<template>
-    <app-details :goodsno="selectedRow.goodsno" :loading="loading">
-        <el-descriptions title="基本信息【单颗裸钻】" :column="2">
-            <el-descriptions-item label="商品编号">DKLZ00000001</el-descriptions-item>
-            <el-descriptions-item label="价格">¥10023.23</el-descriptions-item>
-            <el-descriptions-item label="克拉重量">223.23 克拉</el-descriptions-item>
-            <el-descriptions-item label="克拉单价">¥100.92</el-descriptions-item>
-        </el-descriptions>
-        <el-divider />
-        <el-descriptions title="钻石属性" :column="2">
-            <el-descriptions-item label="形状">圆明亮形(Round)</el-descriptions-item>
-            <el-descriptions-item label="尺寸">1.21 * 1.33 * 1.34</el-descriptions-item>
-            <el-descriptions-item label="颜色">E</el-descriptions-item>
-            <el-descriptions-item label="净度">FL</el-descriptions-item>
-        </el-descriptions>
-        <el-divider />
-        <el-button type="primary" @click="onSubmit">摘牌</el-button>
-    </app-details>
-</template>
-
-<script lang="ts" setup>
-import { PropType } from 'vue'
-import { ElMessage } from 'element-plus'
-import { useBuyOrderDesting } from '@/business/order/desting'
-import AppDetails from '@pc/components/modules/goods-details/index.vue'
-
-const props = defineProps({
-    selectedRow: {
-        type: Object as PropType<Ermcp.SellOrderRsp>,
-        default: () => ({})
-    }
-})
-
-const { loading, formSubmit } = useBuyOrderDesting(props.selectedRow)
-
-const onSubmit = () => {
-    formSubmit().then(() => {
-        ElMessage.success('提交成功')
-    }).catch((err) => {
-        ElMessage.error('提交失败:' + err)
-    })
-}
-</script>

+ 32 - 0
src/packages/pc/views/listing/sell/components/details/index.vue

@@ -0,0 +1,32 @@
+<!-- 出售大厅-我要出售-详情 -->
+<template>
+    <app-details :goodsno="selectedRow.goodsno">
+        <el-button type="primary" @click="onSubmit" :loading="loading" v-if="showButton">立即购买</el-button>
+    </app-details>
+</template>
+
+<script lang="ts" setup>
+import { PropType, computed } from 'vue'
+import { ElMessage } from 'element-plus'
+import { sessionData } from '@/stores'
+import { useBuyOrderDesting } from '@/business/order/desting'
+import AppDetails from '@pc/components/modules/goods-details/index.vue'
+
+const props = defineProps({
+    selectedRow: {
+        type: Object as PropType<Ermcp.SellOrderRsp>,
+        default: () => ({})
+    }
+})
+
+const { loading, formSubmit } = useBuyOrderDesting(props.selectedRow)
+const showButton = computed(() => props.selectedRow.userid !== sessionData.getLoginInfo('UserID'))
+
+const onSubmit = () => {
+    formSubmit().then(() => {
+        ElMessage.success('提交成功')
+    }).catch((err) => {
+        ElMessage.error('提交失败:' + err)
+    })
+}
+</script>

+ 2 - 13
src/packages/pc/views/listing/sell/index.vue

@@ -7,11 +7,11 @@
         <!-- 表格数据 -->
         <app-table :data="dataList" v-model:columns="columns" :loading="loading">
             <template #header>
-                <app-auth-operation :menus="headerButtons" @closed="getSellOrderList" />
+                <app-auth-operation :menus="['add']" @closed="getSellOrderList" />
             </template>
             <!-- 操作 -->
             <template #operate="{ row }">
-                <app-auth-operation :menus="handleOperateButtons(row)" :options="{ selectedRow: row }"
+                <app-auth-operation :menus="['details', 'favorite']" :options="{ goodsno: row.goodsno }"
                     @closed="getSellOrderList" />
             </template>
             <template #footer>
@@ -25,23 +25,12 @@
 <script lang="ts" setup>
 import { ElMessage } from 'element-plus'
 import { useSellOrder } from '@/business/order/list'
-import { sessionData } from '@/stores'
 import AppAuthOperation from '@pc/components/modules/auth-operation/index.vue'
 import AppTable from '@pc/components/base/table/index.vue'
 import AppPagination from '@pc/components/base/pagination/index.vue'
 import AppFilter from '@pc/components/base/table-filter/index.vue'
 
 const { loading, dataList, columns, total, pageIndex, pageSize, selectList, inputList, buttonList, getSellOrderList } = useSellOrder()
-const headerButtons = ['add']
-const operateButtons = ['details', 'delisting', 'inquire', 'favorite']
-
-const handleOperateButtons = (row: Ermcp.SellOrderRsp) => {
-    if (row.userid === sessionData.getLoginInfo('UserID')) {
-        // 自己上架的商品不能摘牌和询价
-        return operateButtons.filter((code) => !['delisting', 'inquire'].includes(code))
-    }
-    return operateButtons
-}
 
 getSellOrderList().catch((err) => ElMessage.error(err))
 </script>

+ 71 - 1
src/packages/pc/views/search/diamond/index.vue

@@ -1,6 +1,76 @@
+<!-- 钻石搜索-单颗裸钻 -->
 <template>
-    <app-view>单颗裸钻</app-view>
+    <app-view>
+        <template #header>
+            <el-form label-width="80px">
+                <el-form-item label="形状">
+                    <app-multiple :data-list="enums.shapeTypeList" checkbox />
+                </el-form-item>
+                <el-form-item label="颜色">
+                    <app-multiple :data-list="enums.colorTypeList" v-model="formData.zscolortype" checkbox />
+                </el-form-item>
+                <el-form-item label="净度">
+                    <app-multiple :data-list="enums.clarityTypeList" v-model="formData.zsclaritytype" checkbox />
+                </el-form-item>
+                <el-form-item label="切工">
+                    <app-multiple :data-list="enums.cutTypeList" v-model="formData.zscuttype" checkbox />
+                </el-form-item>
+                <el-form-item label="对称">
+                    <app-multiple :data-list="enums.symmetryTypeList" v-model="formData.zssymmetrytype" checkbox />
+                </el-form-item>
+                <el-form-item label="抛光">
+                    <app-multiple :data-list="enums.polishTypeList" v-model="formData.zspolishtype" checkbox />
+                </el-form-item>
+                <el-form-item label="荧光">
+                    <app-multiple :data-list="enums.fluorescenceTypeList" v-model="formData.zsfluorescencetype"
+                        checkbox />
+                </el-form-item>
+                <el-form-item label="证书">
+                    <app-multiple :data-list="enums.certTypeList" checkbox />
+                </el-form-item>
+                <el-form-item label="仓库">
+                    <el-select placeholder="请选择">
+                        <el-option label="Zone one" value="shanghai" />
+                        <el-option label="Zone two" value="beijing" />
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="货币">
+                    <app-multiple :data-list="enums.currencyTypeList" checkbox />
+                </el-form-item>
+                <el-form-item label="克拉重量">
+                    <div class="el-form-item--col">
+                        <el-input placeholder="从" style="width:160px" />
+                        <span>-</span>
+                        <el-input placeholder="至" style="width:160px" />
+                    </div>
+                </el-form-item>
+                <el-form-item>
+                    <el-button type="primary" :loading="loading" @click="onSearch">搜索</el-button>
+                    <el-button :disabled="loading">重置</el-button>
+                </el-form-item>
+            </el-form>
+        </template>
+        <app-table :data="dataList" v-model:columns="columns" :show-header="false" :loading="loading">
+            <template #operate="{ row }">
+                <app-auth-operation :options="{ selectedRow: row }" @closed="onSearch" />
+            </template>
+            <template #footer>
+                <app-pagination :total="total" v-model:page-size="pageSize" v-model:page-index="pageIndex"
+                    @change="onSearch" />
+            </template>
+        </app-table>
+    </app-view>
 </template>
 
 <script lang="ts" setup>
+import { useSearch } from '@/business/search'
+import { Category } from '@/constants/diamond'
+import AppMultiple from '@pc/components/base/multiple/index.vue'
+import AppTable from '@pc/components/base/table/index.vue'
+import AppAuthOperation from '@pc/components/modules/auth-operation/index.vue'
+import AppPagination from '@pc/components/base/pagination/index.vue'
+
+const { loading, dataList, columns, total, pageIndex, pageSize, formData, enums, onSearch } = useSearch(Category.Diamond)
+
+onSearch()
 </script>

+ 4 - 2
src/packages/pc/views/search/diamonds/index.vue

@@ -1,3 +1,4 @@
+<!-- 钻石搜索-成批裸钻 -->
 <template>
     <app-view>
         <el-form label-width="80px">
@@ -54,8 +55,9 @@
 </template>
 
 <script lang="ts" setup>
-import { useSearchForm } from '@/business/search'
+import { useSearch } from '@/business/search'
+import { Category } from '@/constants/diamond'
 import AppMultiple from '@pc/components/base/multiple/index.vue'
 
-const { enums } = useSearchForm()
+const { enums } = useSearch(Category.Diamonds)
 </script>

+ 7 - 0
src/packages/pc/views/search/fancy/index.vue

@@ -0,0 +1,7 @@
+<!-- 钻石搜索-单颗彩钻 -->
+<template>
+    <app-view>单颗彩钻</app-view>
+</template>
+
+<script lang="ts" setup>
+</script>

+ 1 - 1
src/packages/pc/views/search/index.vue

@@ -4,5 +4,5 @@
 </template>
 
 <script lang="ts" setup>
-import { getCategoryList, Category } from '@/constants/enum/diamond'
+import { getCategoryList, Category } from '@/constants/diamond'
 </script>

+ 2 - 2
src/packages/pc/views/system/menu/components/edit/index.vue

@@ -72,7 +72,7 @@
 <script lang="ts" setup>
 import { ref, PropType, defineAsyncComponent } from 'vue'
 import { ElMessage } from 'element-plus'
-import { AuthType, UrlType, getAuthTypeList, getUrlTypeList } from '@/constants/enum/menu'
+import { AuthType, UrlType, getAuthTypeList, getUrlTypeList } from '@/constants/menu'
 import { useMenuForm } from '@/business/menu'
 import AppDrawer from '@pc/components/base/drawer/index.vue'
 
@@ -102,7 +102,7 @@ const onSubmit = () => {
         ElMessage.success('提交成功')
         onCancel(true)
     }).catch((err) => {
-        ElMessage.error('提交失败:' + err)
+        ElMessage.error('提交失败' + err)
     })
 }
 </script>

+ 0 - 0
src/packages/pc/views/warehousing/stock/components/details/index.less → src/packages/pc/views/warehousing/goods/components/details/index.less


+ 0 - 0
src/packages/pc/views/warehousing/stock/components/details/index.vue → src/packages/pc/views/warehousing/goods/components/details/index.vue


+ 2 - 2
src/packages/pc/views/warehousing/stock/components/edit/diamond.vue → src/packages/pc/views/warehousing/goods/components/edit/diamond.vue

@@ -111,7 +111,7 @@
 import { ref, PropType, defineAsyncComponent } from 'vue'
 import { ElMessage } from 'element-plus'
 import type { FormInstance, FormRules } from 'element-plus'
-import { Category } from '@/constants/enum/diamond'
+import { Category } from '@/constants/diamond'
 import { useDiamondForm } from '@/business/goods'
 import AppUpload from '@/components/base/upload/index.vue'
 
@@ -188,7 +188,7 @@ const onSubmit = () => {
                 ElMessage.success('提交成功')
                 emit('cancel', true)
             }).catch((err) => {
-                ElMessage.error('提交失败:' + err)
+                ElMessage.error('提交失败' + err)
             })
         }
     })

+ 2 - 2
src/packages/pc/views/warehousing/stock/components/edit/diamonds.vue → src/packages/pc/views/warehousing/goods/components/edit/diamonds.vue

@@ -82,7 +82,7 @@
 import { ref, PropType, defineAsyncComponent } from 'vue'
 import { ElMessage } from 'element-plus'
 import type { FormInstance, FormRules } from 'element-plus'
-import { Category } from '@/constants/enum/diamond'
+import { Category } from '@/constants/diamond'
 import { useDiamondForm } from '@/business/goods'
 import AppMultiple from '@pc/components/base/multiple/index.vue'
 import AppUpload from '@/components/base/upload/index.vue'
@@ -187,7 +187,7 @@ const onSubmit = () => {
                 ElMessage.success('提交成功')
                 emit('cancel', true)
             }).catch((err) => {
-                ElMessage.error('提交失败:' + err)
+                ElMessage.error('提交失败' + err)
             })
         }
     })

+ 2 - 2
src/packages/pc/views/warehousing/stock/components/edit/fancy.vue → src/packages/pc/views/warehousing/goods/components/edit/fancy.vue

@@ -115,7 +115,7 @@
 import { ref, PropType, defineAsyncComponent } from 'vue'
 import { ElMessage } from 'element-plus'
 import type { FormInstance, FormRules } from 'element-plus'
-import { Category } from '@/constants/enum/diamond'
+import { Category } from '@/constants/diamond'
 import { useDiamondForm } from '@/business/goods'
 import AppUpload from '@/components/base/upload/index.vue'
 
@@ -201,7 +201,7 @@ const onSubmit = () => {
                 ElMessage.success('提交成功')
                 emit('cancel', true)
             }).catch((err) => {
-                ElMessage.error('提交失败:' + err)
+                ElMessage.error('提交失败' + err)
             })
         }
     })

+ 7 - 7
src/packages/pc/views/warehousing/stock/components/edit/index.vue → src/packages/pc/views/warehousing/goods/components/edit/index.vue

@@ -18,7 +18,7 @@
 
 <script lang="ts" setup>
 import { shallowRef, defineAsyncComponent, PropType } from 'vue'
-import { getCategoryList, Category } from '@/constants/enum/diamond'
+import { Category } from '@/constants/diamond'
 import AppDrawer from '@pc/components/base/drawer/index.vue'
 
 defineProps({
@@ -40,13 +40,13 @@ const componentMap = new Map<string, unknown>([
 const formRef = shallowRef()
 const show = shallowRef(true)
 const refresh = shallowRef(false)
-const componentId = shallowRef('')
-const categoryList = getCategoryList()
+const componentId = shallowRef(Category[Category.Diamond])
 
-if (categoryList.length) {
-    const value = categoryList[0].value
-    componentId.value = Category[value]
-}
+const categoryList = [
+    { label: '单颗裸钻', value: Category.Diamond },
+    { label: '单颗彩钻', value: Category.Fancy },
+    { label: '钻石首饰', value: Category.Jewelry }
+]
 
 const onCancel = (isRefresh: boolean) => {
     show.value = false

+ 2 - 2
src/packages/pc/views/warehousing/stock/components/edit/jewelry.vue → src/packages/pc/views/warehousing/goods/components/edit/jewelry.vue

@@ -120,7 +120,7 @@
 import { ref, PropType, defineAsyncComponent } from 'vue'
 import { ElMessage } from 'element-plus'
 import type { FormInstance, FormRules } from 'element-plus'
-import { Category } from '@/constants/enum/diamond'
+import { Category } from '@/constants/diamond'
 import { useDiamondForm } from '@/business/goods'
 import AppUpload from '@/components/base/upload/index.vue'
 
@@ -199,7 +199,7 @@ const onSubmit = () => {
                 ElMessage.success('提交成功')
                 emit('cancel', true)
             }).catch((err) => {
-                ElMessage.error('提交失败:' + err)
+                ElMessage.error('提交失败' + err)
             })
         }
     })

+ 2 - 2
src/packages/pc/views/warehousing/stock/components/edit/rough.vue → src/packages/pc/views/warehousing/goods/components/edit/rough.vue

@@ -88,7 +88,7 @@
 import { ref, PropType, defineAsyncComponent } from 'vue'
 import { ElMessage } from 'element-plus'
 import type { FormInstance, FormRules } from 'element-plus'
-import { Category } from '@/constants/enum/diamond'
+import { Category } from '@/constants/diamond'
 import { useDiamondForm } from '@/business/goods'
 import AppMultiple from '@pc/components/base/multiple/index.vue'
 import AppUpload from '@/components/base/upload/index.vue'
@@ -168,7 +168,7 @@ const onSubmit = () => {
                 ElMessage.success('提交成功')
                 emit('cancel', true)
             }).catch((err) => {
-                ElMessage.error('提交失败:' + err)
+                ElMessage.error('提交失败' + err)
             })
         }
     })

+ 0 - 0
src/packages/pc/views/warehousing/stock/index.vue → src/packages/pc/views/warehousing/goods/index.vue


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

@@ -88,7 +88,7 @@ const onSubmit = () => {
                 ElMessage.success('提交成功')
                 onCancel(true)
             }).catch((err) => {
-                ElMessage.error('提交失败:' + err)
+                ElMessage.error('提交失败' + err)
             })
         }
     })

+ 2 - 2
src/services/api/goods/index.ts

@@ -2,7 +2,7 @@ import { httpRequest } from '@/services/http'
 import { HttpRequest } from '@/services/http/interface'
 import { tradeServerRequest } from '@/services/socket/trade'
 import { TradeRequest } from '@/services/socket/trade/interface'
-import { Market } from '@/constants/enum/market'
+import { Market } from '@/constants/market'
 
 /**
  * 查询商品列表
@@ -21,7 +21,7 @@ export function queryDiamondList(params: HttpRequest<{ req: Ermcp.MyWRPositionRe
 /**
  * 获取钻石详情
  */
-export function queryDiamondDetails(params: HttpRequest<{ req: Ermcp.DiamondDetailsReq, rsp: Ermcp.DiamondDetailsRsp[] }>) {
+export function queryDiamondDetails(params: HttpRequest<{ req: Ermcp.DiamondDetailsReq, rsp: Ermcp.DiamondDetailsRsp }>) {
     return httpRequest('/Guangzuan/GetGoods', 'get', params);
 }
 

+ 2 - 2
src/services/api/order/index.ts

@@ -2,7 +2,7 @@ import { httpRequest } from '@/services/http'
 import { HttpRequest } from '@/services/http/interface'
 import { tradeServerRequest } from '@/services/socket/trade'
 import { TradeRequest } from '@/services/socket/trade/interface'
-import { Market } from '@/constants/enum/market'
+import { Market } from '@/constants/market'
 
 /**
  * 钻石买挂牌
@@ -70,7 +70,7 @@ export function queryMyBuyOrder(params: HttpRequest<{ req: Ermcp.MyBuyOrderReq,
 /**
  * 搜索出售大厅委托单
  */
-export function sellOrderSearch(params: HttpRequest<{ req: Ermcp.SellOrderSearchReq, rsp: Ermcp.SellOrderRsp[] }>) {
+export function searchSellOrder(params: HttpRequest<{ req: Ermcp.SellOrderSearchReq, rsp: Ermcp.SellOrderRsp[] }>) {
     return httpRequest('/Guangzuan/QueryDiamond', 'post', params);
 }
 

+ 1 - 1
src/services/language/index.ts

@@ -1,6 +1,6 @@
 import axios from 'axios'
 import { createI18n } from 'vue-i18n'
-import { Language } from '@/constants/enum/language'
+import { Language } from '@/constants/language'
 import { localData } from '@/stores'
 
 export default new (class {

+ 1 - 1
src/services/socket/index.ts

@@ -2,7 +2,7 @@ import { MTP2WebSocket } from '@/utils/websocket'
 import { SendMessage } from '@/utils/websocket/interface'
 import { Package40, Package50 } from '@/utils/websocket/package'
 import { timerInterceptor } from '@/utils/timer'
-import { FunCode } from '@/constants/enum/funcode'
+import { FunCode } from '@/constants/funcode'
 import { parseReceivePush } from './quote/build/decode'
 import protobuf from './trade/protobuf'
 import { checkToken, stopCheckToken, checkTokenLoop } from '@/business/common'

+ 1 - 1
src/services/socket/quote/index.ts

@@ -1,6 +1,6 @@
 import Long from 'long'
 import { Package40 } from '@/utils/websocket/package'
-import { FunCode } from '@/constants/enum/funcode'
+import { FunCode } from '@/constants/funcode'
 import { QuoteRequest } from './interface'
 import { subscribeListToByteArrary } from './build/encode'
 import { parseSubscribeRsp } from './build/decode'

+ 1 - 1
src/services/socket/trade/index.ts

@@ -1,6 +1,6 @@
 import { v4 } from 'uuid'
 import { Package50 } from '@/utils/websocket/package'
-import { FunCode } from '@/constants/enum/funcode'
+import { FunCode } from '@/constants/funcode'
 import { sessionData } from '@/stores'
 import { IMessageHead } from './protobuf/proto'
 import { TradeRequest, TradeResponse } from './interface'

+ 2 - 2
src/stores/modules/storage.ts

@@ -1,7 +1,7 @@
 import { queryAllEnums, queryNewFuncmenu, queryTableDefine } from '@/services/api/common'
 import { queryAccountMenu } from '@/services/api/account'
-import { AppTheme } from '@/constants/enum/theme'
-import { Language } from '@/constants/enum/language'
+import { AppTheme } from '@/constants/theme'
+import { Language } from '@/constants/language'
 import WebStorage from '@/utils/storage'
 import plus from '@/utils/h5plus'
 

+ 1 - 1
src/types/ermcp/account.d.ts

@@ -1,4 +1,4 @@
-import { AuthType, UrlType } from '@/constants/enum/menu'
+import { AuthType, UrlType } from '@/constants/menu'
 
 declare global {
     /** 企业风管 */

+ 2 - 2
src/types/store/globalStorage.d.ts

@@ -1,5 +1,5 @@
-import { AppTheme } from '@/constants/enum/theme'
-import { Language } from '@/constants/enum/language'
+import { AppTheme } from '@/constants/theme'
+import { Language } from '@/constants/language'
 
 declare global {
     namespace Store {