li.shaoyi 2 yıl önce
ebeveyn
işleme
29cf8a296d
32 değiştirilmiş dosya ile 137 ekleme ve 141 silme
  1. 1 1
      public/config/appconfig.json
  2. 3 1
      src/business/login/index.ts
  3. 0 51
      src/business/notice/index.ts
  4. 2 2
      src/business/table/columns.ts
  5. 2 2
      src/hooks/component/index.ts
  6. 33 49
      src/packages/pc/components/layouts/header/components/notice/index.vue
  7. 4 7
      src/packages/pc/components/layouts/header/index.vue
  8. 1 1
      src/packages/pc/views/bargain/buy/components/audit/index.vue
  9. 1 1
      src/packages/pc/views/bargain/sell/components/audit/index.vue
  10. 1 1
      src/packages/pc/views/bonded/components/detail-edit/index.vue
  11. 1 1
      src/packages/pc/views/centralize/mine/components/add/index.vue
  12. 1 1
      src/packages/pc/views/customs/exit/components/check/index.vue
  13. 1 1
      src/packages/pc/views/customs/exit/components/delivery/index.vue
  14. 1 1
      src/packages/pc/views/customs/exit/components/edit/detail-edit/index.vue
  15. 2 2
      src/packages/pc/views/mine/bank/components/deposit/index.vue
  16. 1 1
      src/packages/pc/views/mine/bank/components/withdraw/index.vue
  17. 1 1
      src/packages/pc/views/order/main/components/contracted/index.vue
  18. 1 1
      src/packages/pc/views/order/main/components/delay/index.vue
  19. 1 1
      src/packages/pc/views/order/main/components/manual/index.vue
  20. 1 1
      src/packages/pc/views/presale/mine/components/add/index.vue
  21. 4 5
      src/packages/pc/views/system/menu/components/edit/index.vue
  22. 1 1
      src/packages/pc/views/trade/buy/components/delisting/index.vue
  23. 1 1
      src/packages/pc/views/warehousing/goods/components/bargain/index.vue
  24. 1 0
      src/packages/pc/views/warehousing/goods/components/details/index.less
  25. 3 1
      src/packages/pc/views/warehousing/goods/components/details/index.vue
  26. 1 1
      src/packages/pc/views/warehousing/goods/components/edit/diamond.vue
  27. 1 1
      src/packages/pc/views/warehousing/goods/components/edit/diamonds.vue
  28. 1 1
      src/packages/pc/views/warehousing/goods/components/edit/fancy.vue
  29. 1 1
      src/packages/pc/views/warehousing/goods/components/edit/jewelry.vue
  30. 1 1
      src/packages/pc/views/warehousing/goods/components/edit/rough.vue
  31. 2 1
      src/stores/index.ts
  32. 61 0
      src/stores/modules/notice.ts

+ 1 - 1
public/config/appconfig.json

@@ -1,5 +1,5 @@
 {
   "version": "1.0.0",
   "versionCode": "100000",
-  "apiUrl": "http://192.168.31.104:8080/cfg?key=test_104"
+  "apiUrl": "http://192.168.31.201:8080/cfg?key=test_201"
 }

+ 3 - 1
src/business/login/index.ts

@@ -2,7 +2,7 @@ import { shallowRef, reactive } from 'vue'
 import { v4 } from 'uuid'
 import { timerTask } from '@/utils/timer'
 import { queryLoginId, login } from '@/services/api/account'
-import { useLoginStore, useUserStore, useEnumStore, useErrorInfoStore, useFavoriteStore, useAccountStore, usePerformanceStore, useExrateStore } from '@/stores'
+import { useLoginStore, useUserStore, useEnumStore, useErrorInfoStore, useFavoriteStore, useAccountStore, usePerformanceStore, useExrateStore, useNotice } from '@/stores'
 import { checkToken, checkTokenLoop } from '@/business/common'
 import service from '@/services'
 import socket from '@/services/socket'
@@ -23,6 +23,7 @@ export function useLogin(persist = false) {
     const performanceStore = usePerformanceStore()
     const exrateStore = useExrateStore()
     const favoriteStore = useFavoriteStore()
+    const noticeStore = useNotice()
 
     const { logining, token } = loginStore.$toRefs()
 
@@ -53,6 +54,7 @@ export function useLogin(persist = false) {
         accountStore.getAccountList()
         favoriteStore.getFavoriteList()
         exrateStore.getExrateList()
+        noticeStore.getNoticeList()
         checkTokenLoop()
     }
 

+ 0 - 51
src/business/notice/index.ts

@@ -1,51 +0,0 @@
-import { shallowRef, computed } from 'vue'
-import { timerTask } from '@/utils/timer'
-import { queryNotice, postNoticeReaded } from '@/services/api/common'
-import { useLoginStore } from '@/stores'
-
-const loginStore = useLoginStore()
-const { loginId } = loginStore.$toRefs()
-
-export function useNotice() {
-    const dataList = shallowRef<Ermcp.NoticeRsp[]>([])
-    const loading = shallowRef(false)
-
-    // 未读列表
-    const unreadList = computed(() => {
-        const data = dataList.value ?? []
-        return data.filter((e) => !e.readed)
-    })
-
-    const getNoticeList = async () => {
-        try {
-            loading.value = true
-            timerTask.clearTimeout('systemNotice')
-            const res = await queryNotice({
-                loginID: loginId.value
-            })
-            dataList.value = res.data
-        } finally {
-            loading.value = false
-            // 轮询查询系统通知
-            timerTask.setTimeout(() => {
-                getNoticeList()
-            }, 60 * 1000, 'systemNotice')
-        }
-    }
-
-    // 更新已读
-    const updateNoticeReaded = (id: number) => {
-        return postNoticeReaded({
-            loginID: Number(loginId.value),
-            noticeID: id,
-        })
-    }
-
-    return {
-        loading,
-        dataList,
-        unreadList,
-        getNoticeList,
-        updateNoticeReaded,
-    }
-}

+ 2 - 2
src/business/table/columns.ts

@@ -141,7 +141,7 @@ export const pcTableColumnMap = new Map<TableColumnKey, Ermcp.TableColumn[]>([
         { prop: 'qty', label: '克拉重量' },
         { prop: 'priceper', label: '克拉单价' },
         { prop: 'applyprice', label: '我的出价' },
-        { prop: 'applyremark ', label: '申请备注' },
+        { prop: 'applyremark', label: '申请备注' },
         { prop: 'confirmremark', label: '确认备注' },
         { prop: 'applystatus', label: '申请状态' },
         { prop: 'applytime', label: '申请时间', width: 200 },
@@ -161,7 +161,7 @@ export const pcTableColumnMap = new Map<TableColumnKey, Ermcp.TableColumn[]>([
         { prop: 'goodsno', label: '我的商品' },
         { prop: 'applyqty', label: '克拉重量' },
         { prop: 'applyprice', label: '我的出价' },
-        { prop: 'applyremark ', label: '申请备注' },
+        { prop: 'applyremark', label: '申请备注' },
         { prop: 'auditremark', label: '确认备注' },
         { prop: 'applystatus', label: '申请状态' },
         { prop: 'applytime', label: '申请时间', width: 200 },

+ 2 - 2
src/hooks/component/index.ts

@@ -31,7 +31,7 @@ export function useComponent(callback?: (componentName?: string) => void) {
      * @param componentName 
      */
     const openComponent = (componentName: string) => {
-        console.log('打开组件:' + componentName)
+        //console.log('打开组件:' + componentName)
         components.add(componentName)
         componentId.value = componentName
     }
@@ -43,7 +43,7 @@ export function useComponent(callback?: (componentName?: string) => void) {
     const closeComponent = (isCallback?: boolean) => {
         const componentName = componentId.value
         if (componentName) {
-            console.log('关闭组件:' + componentName)
+            //console.log('关闭组件:' + componentName)
             components.delete(componentName)
             componentId.value = [...components.values()].pop()
 

+ 33 - 49
src/packages/pc/components/layouts/header/components/notice/index.vue

@@ -7,61 +7,46 @@
                 <el-radio-button label="message">消息</el-radio-button>
             </el-radio-group>
         </template>
-        <!-- <el-timeline>
-            <template v-for="(item,index) in tableList" :key="index">
-                <el-timeline-item :timestamp="moment(item.createtime).format('YYYY-MM-DD HH:mm:ss')" placement="top">
-                    <el-card shadow="never">
-                        <h4 style="margin-bottom: 10px;font-weight: bold;">{{ item.title }}</h4>
-                        <p>{{ item.content }}</p>
-                    </el-card>
-                </el-timeline-item>
-            </template>
-        </el-timeline> -->
-        <el-collapse v-model="selectedItem" accordion v-if="tableList.length" @change="collapseChange">
-            <template v-for="(item,index) in tableList" :key="index">
-                <el-collapse-item :name="index">
-                    <template #title>
-                        <h4 :style="selectedItem === index ? 'font-weight: bold;' : 'color: #666;'">
-                            <el-badge :is-dot="!item.readed" style="margin-right: 8px;" />
-                            <span>{{ item.title }}</span>
-                        </h4>
+        <el-tabs tab-position="left" v-model="activeId" @tab-change="collapseChange" v-if="dataList.length">
+            <template v-for="(item, index) in dataList" :key="index">
+                <el-tab-pane :name="item.autoid">
+                    <template #label>
+                        <el-badge :is-dot="!item.readed" style="margin-right: 8px;" />
+                        <span>{{ formatDate(item.createtime, 'MM/DD HH:mm') }}</span>
                     </template>
-                    <p style="padding-left: 28px;color: #999;">{{
-                    moment(item.createtime).format('YYYY-MM-DD HH:mm:ss')
-                    }}</p>
-                    <p style="padding-left: 28px;">{{ item.content }}</p>
-                </el-collapse-item>
+                    <div style="padding:0 28px;">
+                        <h4 style="display: flex; flex-direction: column;">
+                            <span style="font-weight: bold;">{{ item.title }}</span>
+                            <span style="font-size: 12px; color: #999;margin: 8px 0;">{{ formatDate(item.createtime)
+                            }}</span>
+                        </h4>
+                        <p style="line-height: 26px;color: #555;">{{ item.content }}</p>
+                    </div>
+                </el-tab-pane>
             </template>
-        </el-collapse>
+        </el-tabs>
         <el-empty v-else />
     </app-drawer>
 </template>
 
 <script lang="ts" setup>
-import { shallowRef, PropType, computed } from 'vue'
-import { useNotice } from '@/business/notice'
-import moment from 'moment'
+import { shallowRef, computed, onMounted } from 'vue'
+import { formatDate } from '@/filters'
+import { useNotice } from '@/stores'
 import AppDrawer from '@pc/components/base/drawer/index.vue'
 
-const props = defineProps({
-    dataList: {
-        type: Array as PropType<Ermcp.NoticeRsp[]>,
-        default: () => ([])
-    }
-})
-
-const { updateNoticeReaded } = useNotice()
+const noticeStore = useNotice()
 const show = shallowRef(true)
 const selectedTab = shallowRef('notice')
-const selectedItem = shallowRef(0)
+const activeId = shallowRef(0)
 
-const tableList = computed(() => {
+const dataList = computed(() => {
     switch (selectedTab.value) {
         case 'notice': {
-            return props.dataList.filter((e) => e.msgtype === 1)
+            return noticeStore.noticeList.filter((e) => e.msgtype === 1)
         }
         case 'message': {
-            return props.dataList.filter((e) => e.msgtype === 2)
+            return noticeStore.noticeList.filter((e) => e.msgtype === 2)
         }
         default: {
             return []
@@ -69,16 +54,15 @@ const tableList = computed(() => {
     }
 })
 
-const collapseChange = (index: number) => {
-    if (tableList.value.length && index.toString()) {
-        const item = tableList.value[index]
-        if (!item.readed) {
-            updateNoticeReaded(item.autoid).then(() => {
-                //item.readed = true
-            })
-        }
-    }
+const collapseChange = (id: number) => {
+    noticeStore.updateNoticeReaded(id)
 }
 
-collapseChange(selectedItem.value)
+onMounted(() => {
+    const [firstItem] = dataList.value
+    if (firstItem) {
+        activeId.value = firstItem.autoid
+        collapseChange(activeId.value)
+    }
+})
 </script>

+ 4 - 7
src/packages/pc/components/layouts/header/index.vue

@@ -14,7 +14,7 @@
         <div class="app-header__right">
             <slot name="right"></slot>
             <div class="iconbar">
-                <el-badge type="danger" :is-dot="unreadList.length > 0">
+                <el-badge type="danger" :is-dot="noticeStore.unreadList.length > 0">
                     <app-icon icon="g-icon--notice" @click="openComponent('notice')" />
                 </el-badge>
                 <!-- <app-icon icon="g-icon--message" @click="routerTo('bargain_buy')" /> -->
@@ -38,16 +38,15 @@
                 </template>
             </el-dropdown>
         </div>
-        <component :is="componentMap.get(componentId)" v-bind="{ dataList }" @closed="closeComponent" v-if="componentId" />
+        <component :is="componentMap.get(componentId)" @closed="closeComponent" v-if="componentId" />
     </div>
 </template>
 
 <script lang="ts" setup>
 import { ref, onMounted, defineAsyncComponent } from 'vue'
 import { useRouter } from 'vue-router'
-import { useUserStore, useGlobalStore } from '@/stores'
+import { useUserStore, useGlobalStore, useNotice } from '@/stores'
 import { useComponent } from '@/hooks/component'
-import { useNotice } from '@/business/notice'
 import eventBus from '@/services/bus'
 import AppIcon from '@pc/components/base/icon/index.vue'
 
@@ -58,7 +57,7 @@ const componentMap = new Map<string, unknown>([
 ])
 
 const { componentId, openComponent, closeComponent } = useComponent()
-const { dataList, unreadList, getNoticeList } = useNotice()
+const noticeStore = useNotice()
 const globalStore = useGlobalStore()
 const userStore = useUserStore()
 const router = useRouter()
@@ -79,8 +78,6 @@ const routerTo = (name: string) => {
     router.push({ name })
 }
 
-getNoticeList()
-
 onMounted(() => {
     // 监听全屏变化
     window.addEventListener('fullscreenchange', () => {

+ 1 - 1
src/packages/pc/views/bargain/buy/components/audit/index.vue

@@ -22,7 +22,7 @@
         </app-table-details>
         <el-form ref="formRef" label-width="60px" :model="formData" :rules="formRules" style="margin-top: 20px;">
             <el-form-item label="备注" prop="AuditRemark">
-                <el-input type="textarea" :rows="3" v-model="formData.AuditRemark" />
+                <el-input type="textarea" maxlength="120" :rows="3" v-model="formData.AuditRemark" />
             </el-form-item>
         </el-form>
         <template #footer>

+ 1 - 1
src/packages/pc/views/bargain/sell/components/audit/index.vue

@@ -14,7 +14,7 @@
         </app-table-details>
         <el-form ref="formRef" label-width="60px" :model="formData" :rules="formRules" style="margin-top: 20px;">
             <el-form-item label="备注" prop="AuditRemark">
-                <el-input type="textarea" :rows="3" v-model="formData.AuditRemark" />
+                <el-input type="textarea" maxlength="120" :rows="3" v-model="formData.AuditRemark" />
             </el-form-item>
         </el-form>
         <template #footer>

+ 1 - 1
src/packages/pc/views/bonded/components/detail-edit/index.vue

@@ -42,7 +42,7 @@
                 <el-input placeholder="请输入" v-model="formItem.origincountry" />
             </el-form-item>
             <el-form-item class="el-form-item--row" label="备注" prop="remark">
-                <el-input type="textarea" v-model="formItem.remark" />
+                <el-input type="textarea" maxlength="120" v-model="formItem.remark" />
             </el-form-item>
         </el-form>
         <template #footer>

+ 1 - 1
src/packages/pc/views/centralize/mine/components/add/index.vue

@@ -105,7 +105,7 @@
                 <app-upload :file-types="['image']" :limit="5" type-message="请选择正确的图片类型" @change="onUploadChange" />
             </el-form-item>
             <el-form-item class="el-form-item--row" label="备注" prop="Remark">
-                <el-input type="textarea" v-model="formData.Remark" />
+                <el-input type="textarea" maxlength="120" v-model="formData.Remark" />
             </el-form-item>
         </el-form>
         <template #footer>

+ 1 - 1
src/packages/pc/views/customs/exit/components/check/index.vue

@@ -6,7 +6,7 @@
                 {{ selectedRow.orderidstr }}
             </el-form-item>
             <el-form-item class="el-form-item--row" label="备注" prop="Remark">
-                <el-input type="textarea" v-model="formData.Remark" />
+                <el-input type="textarea" maxlength="120" v-model="formData.Remark" />
             </el-form-item>
         </el-form>
         <template #footer>

+ 1 - 1
src/packages/pc/views/customs/exit/components/delivery/index.vue

@@ -6,7 +6,7 @@
                 {{ selectedRow.orderidstr }}
             </el-form-item>
             <el-form-item class="el-form-item--row" label="备注" prop="Remark">
-                <el-input type="textarea" v-model="formData.Remark" />
+                <el-input type="textarea" maxlength="120" v-model="formData.Remark" />
             </el-form-item>
         </el-form>
         <template #footer>

+ 1 - 1
src/packages/pc/views/customs/exit/components/edit/detail-edit/index.vue

@@ -43,7 +43,7 @@
                 <el-input placeholder="请输入" v-model="formItem.ColorInfo" />
             </el-form-item>
             <el-form-item class="el-form-item--row" label="其他" prop="Remark">
-                <el-input type="textarea" v-model="formItem.Remark" />
+                <el-input type="textarea" maxlength="120" v-model="formItem.Remark" />
             </el-form-item>
         </el-form>
         <template #footer>

+ 2 - 2
src/packages/pc/views/mine/bank/components/deposit/index.vue

@@ -12,11 +12,11 @@
             <el-form-item label="入金金额" prop="Amount">
                 <el-input type="number" placeholder="请输入" v-model="formData.Amount" />
             </el-form-item>
-        <!-- <el-form-item label="金额大写">
+            <!-- <el-form-item label="金额大写">
                 <span>壹万元</span>
                                 </el-form-item> -->
             <el-form-item class="el-form-item--row" label="备注" prop="Remark">
-                <el-input type="textarea" :rows="3" v-model="formData.Remark" />
+                <el-input type="textarea" maxlength="120" :rows="3" v-model="formData.Remark" />
             </el-form-item>
         </el-form>
         <span>请前往浦发银行网银端进行入金操作。</span>

+ 1 - 1
src/packages/pc/views/mine/bank/components/withdraw/index.vue

@@ -15,7 +15,7 @@
                 <span>壹万元</span>
             </el-form-item> -->
             <el-form-item class="el-form-item--row" label="备注" prop="Remark">
-                <el-input type="textarea" :rows="3" v-model="formData.Remark" />
+                <el-input type="textarea" maxlength="120" :rows="3" v-model="formData.Remark" />
             </el-form-item>
         </el-form>
         <template #footer>

+ 1 - 1
src/packages/pc/views/order/main/components/contracted/index.vue

@@ -9,7 +9,7 @@
                 <span>{{ handleNumberValue(getStepTypeName(selectedRow.steptypeid)) }}</span>
             </el-form-item>
             <el-form-item label="备注" prop="ApplyRemark">
-                <el-input type="textarea" :rows="3" v-model="formData.ApplyRemark" />
+                <el-input type="textarea" maxlength="120" :rows="3" v-model="formData.ApplyRemark" />
             </el-form-item>
             <el-form-item label="附件" prop="Attachment">
                 <app-upload :file-types="['image']" type-message="请选择正确的图片类型" @change="onUploadChange" />

+ 1 - 1
src/packages/pc/views/order/main/components/delay/index.vue

@@ -12,7 +12,7 @@
                 <el-input type="number" placeholder="请输入" v-model="formData.delaydays" />
             </el-form-item>
             <el-form-item label="备注" prop="applyremark">
-                <el-input type="textarea" :rows="3" v-model="formData.applyremark" />
+                <el-input type="textarea" maxlength="120" :rows="3" v-model="formData.applyremark" />
             </el-form-item>
         </el-form>
         <template #footer>

+ 1 - 1
src/packages/pc/views/order/main/components/manual/index.vue

@@ -6,7 +6,7 @@
                 <span>是否执行当前步骤【{{ handleNumberValue(getStepTypeName(selectedRow.steptypeid)) }}】?</span>
             </el-form-item>
             <el-form-item label="备注" prop="StepRemark">
-                <el-input type="textarea" :rows="3" v-model="formData.StepRemark" />
+                <el-input type="textarea" maxlength="120" :rows="3" v-model="formData.StepRemark" />
             </el-form-item>
         </el-form>
         <template #footer>

+ 1 - 1
src/packages/pc/views/presale/mine/components/add/index.vue

@@ -64,7 +64,7 @@
                 <app-upload :file-types="['image']" :limit="5" type-message="请选择正确的图片类型" @change="onUploadChange" />
             </el-form-item>
             <el-form-item class="el-form-item--row" label="备注" prop="Remark">
-                <el-input type="textarea" v-model="formData.Remark" />
+                <el-input type="textarea" maxlength="120" v-model="formData.Remark" />
             </el-form-item>
         </el-form>
         <template #footer>

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

@@ -1,6 +1,5 @@
 <template>
-    <app-drawer class="system-menu-edit" title="编辑" width="680" v-model:show="show" :loading="loading"
-        :refresh="refresh">
+    <app-drawer class="system-menu-edit" title="编辑" width="680" v-model:show="show" :loading="loading" :refresh="refresh">
         <template #default>
             <el-form ref="formRef" label-width="90px" :model="formData">
                 <el-form-item label="权限类型" prop="authtype">
@@ -44,8 +43,8 @@
                     <el-input v-model="formData.url">
                         <template #prepend>
                             <el-select v-model="formData.urltype" style="width: 120px">
-                                <el-option :label="item.label" :value="item.value"
-                                    v-for="(item, index) in getUrlTypeList()" :key="index" />
+                                <el-option :label="item.label" :value="item.value" v-for="(item, index) in getUrlTypeList()"
+                                    :key="index" />
                             </el-select>
                         </template>
                     </el-input>
@@ -55,7 +54,7 @@
                     <el-input v-model="formData.component" />
                 </el-form-item>
                 <el-form-item label="备注" prop="remark">
-                    <el-input type="textarea" :rows="2" v-model="formData.remark" />
+                    <el-input type="textarea" maxlength="120" :rows="2" v-model="formData.remark" />
                 </el-form-item>
                 <el-form-item label="是否隐藏">
                     <el-switch :active-value="1" :inactive-value="0" v-model="formData.hidden" />

+ 1 - 1
src/packages/pc/views/trade/buy/components/delisting/index.vue

@@ -32,7 +32,7 @@
                 </div>
             </el-form-item>
             <el-form-item label="备注" prop="ApplyRemark">
-                <el-input type="textarea" :rows="3" v-model="formData.ApplyRemark" />
+                <el-input type="textarea" maxlength="120" :rows="3" v-model="formData.ApplyRemark" />
             </el-form-item>
             <el-form-item>
                 <el-button type="primary" :loading="loading" @click="onSubmit">摘牌申请</el-button>

+ 1 - 1
src/packages/pc/views/warehousing/goods/components/bargain/index.vue

@@ -14,7 +14,7 @@
                 </div>
             </el-form-item>
             <el-form-item label="备注" prop="ApplyRemark">
-                <el-input type="textarea" :rows="3" v-model="formData.ApplyRemark" />
+                <el-input type="textarea" maxlength="120" :rows="3" v-model="formData.ApplyRemark" />
             </el-form-item>
         </el-form>
         <template #footer>

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

@@ -59,6 +59,7 @@
     &__main {
         flex: 1;
         padding: 60px 30px;
+        overflow: auto;
 
         .sku {
             &-title {

+ 3 - 1
src/packages/pc/views/warehousing/goods/components/details/index.vue

@@ -82,7 +82,9 @@
                     </div>
                     <div class="sku-parameter" v-if="details.performancetemplateid">
                         <h4>履约规则</h4>
-                        <app-performance-rule :item="getPerformanceTemplateById(details.performancetemplateid)" />
+                        <el-scrollbar>
+                            <app-performance-rule :item="getPerformanceTemplateById(details.performancetemplateid)" />
+                        </el-scrollbar>
                     </div>
                     <div class="sku-parameter">
                         <h4>钻石属性</h4>

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

@@ -96,7 +96,7 @@
             <app-upload :file-types="['image']" type-message="请选择正确的图片类型" @change="onUploadChange" />
         </el-form-item>
         <el-form-item class="el-form-item--row" label="备注" prop="Remark">
-            <el-input type="textarea" v-model="formData.Remark" />
+            <el-input type="textarea" maxlength="120" v-model="formData.Remark" />
         </el-form-item>
     </el-form>
 </template>

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

@@ -63,7 +63,7 @@
             <app-upload :file-types="['image']" type-message="请选择正确的图片类型" @change="onUploadChange" />
         </el-form-item>
         <el-form-item class="el-form-item--row" label="备注" prop="Remark">
-            <el-input type="textarea" v-model="formData.Remark" />
+            <el-input type="textarea" maxlength="120" v-model="formData.Remark" />
         </el-form-item>
     </el-form>
 </template>

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

@@ -106,7 +106,7 @@
             <app-upload :file-types="['image']" type-message="请选择正确的图片类型" @change="onUploadChange" />
         </el-form-item>
         <el-form-item class="el-form-item--row" label="备注" prop="Remark">
-            <el-input type="textarea" v-model="formData.Remark" />
+            <el-input type="textarea" maxlength="120" v-model="formData.Remark" />
         </el-form-item>
     </el-form>
 </template>

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

@@ -105,7 +105,7 @@
             <app-upload :file-types="['image']" type-message="请选择正确的图片类型" @change="onUploadChange" />
         </el-form-item>
         <el-form-item class="el-form-item--row" label="备注" prop="Remark">
-            <el-input type="textarea" v-model="formData.Remark" />
+            <el-input type="textarea" maxlength="120" v-model="formData.Remark" />
         </el-form-item>
     </el-form>
 </template>

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

@@ -70,7 +70,7 @@
             <app-upload />
         </el-form-item>
         <el-form-item class="el-form-item--row" label="备注" prop="Remark">
-            <el-input type="textarea" v-model="formData.Remark" />
+            <el-input type="textarea" maxlength="120" v-model="formData.Remark" />
         </el-form-item>
     </el-form>
 </template>

+ 2 - 1
src/stores/index.ts

@@ -10,4 +10,5 @@ export { useErrorInfoStore } from './modules/errorInfo'
 export { useFavoriteStore } from './modules/favorite'
 export { useTableColumnStore } from './modules/tableColumn'
 export { usePerformanceStore } from './modules/performance'
-export { useExrateStore } from './modules/exrate'
+export { useExrateStore } from './modules/exrate'
+export { useNotice } from './modules/notice'

+ 61 - 0
src/stores/modules/notice.ts

@@ -0,0 +1,61 @@
+import { reactive, toRefs, computed } from 'vue'
+import { timerTask } from '@/utils/timer'
+import { queryNotice, postNoticeReaded } from '@/services/api/common'
+import { useLoginStore } from './login'
+import { defineStore } from '../store'
+
+/**
+ * 系统通知存储对象
+ */
+export const useNotice = defineStore(() => {
+    const state = reactive({
+        loading: false,
+        noticeList: <Ermcp.NoticeRsp[]>[], // 通知列表
+    })
+
+    // 未读列表
+    const unreadList = computed(() => {
+        return state.noticeList.filter((e) => !e.readed)
+    })
+
+    // 获取通知列表
+    const getNoticeList = async () => {
+        try {
+            const loginStore = useLoginStore()
+            state.loading = true
+            timerTask.clearTimeout('systemNotice')
+            const res = await queryNotice({
+                loginID: loginStore.loginId
+            })
+            state.noticeList = res.data
+        } finally {
+            state.loading = false
+            // 轮询查询系统通知
+            timerTask.setTimeout(() => {
+                getNoticeList()
+            }, 60 * 1000, 'systemNotice')
+        }
+    }
+
+    // 更新已读
+    const updateNoticeReaded = (id: number) => {
+        const loginStore = useLoginStore()
+        const item = state.noticeList.find((e) => e.autoid === id)
+
+        if (item && !item.readed) {
+            postNoticeReaded({
+                loginID: Number(loginStore.loginId),
+                noticeID: id,
+            }).then(() => {
+                item.readed = true
+            })
+        }
+    }
+
+    return {
+        ...toRefs(state),
+        unreadList,
+        getNoticeList,
+        updateNoticeReaded,
+    }
+})