li.shaoyi 11 månader sedan
förälder
incheckning
bf4588eee3

+ 2 - 2
oem/tss/config/appconfig.json

@@ -1,8 +1,8 @@
 {
   "appId": "com.muchinfo.tss",
   "appName": "TCE",
-  "version": "1.0.29",
-  "versionCode": "100029",
+  "version": "1.0.32",
+  "versionCode": "100032",
   "apiUrl": "http://192.168.31.210:8080/cfg?key=test_210",
   "tradeChannel": "ws",
   "showLoginAlert": true,

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
src/packages/mobile/assets/themes/base/iconfont.less


+ 8 - 0
src/packages/mobile/components/base/waterfall/flex/index.less

@@ -0,0 +1,8 @@
+.app-waterfall {
+    display: flex;
+
+    &__column {
+        flex: 1;
+        height:min-content;
+    }
+}

+ 121 - 0
src/packages/mobile/components/base/waterfall/flex/index.vue

@@ -0,0 +1,121 @@
+<!-- 瀑布流展示-弹性布局方式 -->
+<template>
+    <div ref="waterfallRef" class="app-waterfall">
+        <template v-for="(data, i) in state.columns" :key="i">
+            <div class="app-waterfall__column" :style="i > 0 ? columnStyles : {}">
+                <template v-for="(item, n) in data" :key="n">
+                    <div class="app-waterfall__column-item">
+                        <slot :item="item">{{ item }}</slot>
+                    </div>
+                </template>
+            </div>
+        </template>
+    </div>
+</template>
+
+<script lang="ts" setup>
+import { reactive, shallowRef, computed,  watch, onMounted, onActivated, onDeactivated } from 'vue'
+
+const props = defineProps({
+    //数据列表
+    dataList: {
+        type: Array,
+        default: () => ([])
+    },
+    //列数
+    column: {
+        type: Number,
+        default: 2
+    },
+    //间距
+    gap: {
+        type: Number,
+        default: 10
+    }
+})
+
+const waterfallRef = shallowRef<HTMLDivElement>()
+
+const state = reactive({
+    columns: Array.from<unknown, unknown[]>({ length: props.column }, () => []),
+    renderedItemCount: 0,
+    loadedImageCount: 0,
+    isDeactivated: false
+})
+
+const columnStyles = computed(() => ({
+    marginLeft: `${props.gap}px`
+}))
+
+const render = async () => {
+    // 增量按需更新
+    if (props.dataList.length > state.renderedItemCount) {
+        const el = waterfallRef.value
+        if (el) {
+            const imageElements = el.querySelectorAll('img')
+            const images = Array.from(imageElements).slice(state.loadedImageCount)
+
+            if (images.length) {
+                // 等待所有图片加载完成
+                await Promise.all(images.map((img) => new Promise<void>((resolve) => {
+                    if (img.complete) {
+                        resolve()
+                    } else {
+                        img.onload = () => resolve()
+                        img.onerror = () => resolve()
+                    }
+                })))
+
+                // 更新已加载完成的图片总数
+                state.loadedImageCount += images.length
+            }
+
+            // 在 keepalive 组件下,如果数据还未全部加载完成之前跳转了页面,这会导致获取不到元素信息,从而影响布局的正常显示
+            // 所以需要暂停数据的加载,待页面重新显示后继续渲染
+            if (!state.isDeactivated) {
+                const columnElements = el.querySelectorAll<HTMLDivElement>('.app-waterfall__column')
+                const columnHeights = [...columnElements].map((e) => e.offsetHeight)
+
+                const minHeight = Math.min(...columnHeights) // 获取数组中最小值
+                const columnIndex = columnHeights.findIndex((e) => e === minHeight) // 最小值的索引位置
+
+                const data = state.columns[columnIndex]
+                const item = props.dataList[state.renderedItemCount]
+                data.push(item)
+
+                // 更新已渲染完成的数据总数
+                state.renderedItemCount++
+                requestAnimationFrame(() => render())
+            }
+        }
+    }
+}
+
+// 待优化,未完成
+// watch(() => props.dataList, () => {
+//     state.renderedItemCount = 0
+//     state.loadedImageCount = 0
+// })
+
+watch(() => props.dataList.length, () => {
+    render()
+})
+
+onMounted(() => {
+    render()
+
+    onActivated(() => {
+        state.isDeactivated = false
+        // 对未完成加载的数据进行渲染
+        render()
+    })
+})
+
+onDeactivated(() => {
+    state.isDeactivated = true
+})
+</script>
+
+<style lang="less">
+@import './index.less';
+</style>

+ 2 - 1
src/packages/mobile/components/base/waterfall/index.vue

@@ -1,3 +1,4 @@
+<!-- 瀑布流展示-绝对定位方式 -->
 <template>
     <div class="app-waterfall">
         <ul ref="waterfallRef" v-if="dataList.length">
@@ -60,7 +61,7 @@ const render = () => {
                     }
                 })))
 
-                // 在 keepalive 组件下,如果数据还未全部加载完成之前跳转了页面,这会导致元素获取不到宽度,从而影响布局的正常显示
+                // 在 keepalive 组件下,如果数据还未全部加载完成之前跳转了页面,这会导致获取不到元素宽度,从而影响布局的正常显示
                 // 所以需要暂停数据的加载,待页面重新显示后继续渲染
                 if (!el.offsetWidth) break
 

+ 4 - 0
src/packages/sbyj/views/home/main/index.less

@@ -82,6 +82,10 @@
                     &-pickup--line {
                         background-color: #69869d;
                     }
+
+                    &-inventory {
+                        background-color: #8b699d;
+                    }
                 }
             }
         }

+ 1 - 1
src/packages/sbyj/views/home/main/index.vue

@@ -32,7 +32,7 @@
         </ul>
         <ul>
           <li @click="routerTo('inventory-list')">
-            <Iconfont label-direction="bottom" icon="g-icon-pickup--line">我的库存</Iconfont>
+            <Iconfont label-direction="bottom" icon="g-icon-inventory">我的库存</Iconfont>
           </li>
         </ul>
       </app-block>

+ 63 - 0
src/packages/sbyj/views/inventory/components/logs/index.less

@@ -0,0 +1,63 @@
+.order-list {
+    padding: 10px;
+    padding-bottom: 0;
+
+    &__box {
+        &:not(:first-child) {
+            margin-top: 10px;
+        }
+
+        background-color: #fff;
+        border-radius: 8px;
+        padding: 12px;
+    }
+
+    &__titlebar {
+        display: flex;
+        justify-content: space-between;
+        margin-bottom: 10px;
+
+        .left {
+            h4 {
+                font-weight: bold;
+            }
+
+            span {
+                font-size: 12px;
+                color: #999;
+            }
+        }
+
+        .right {
+            font-size: 14px;
+            color: #999;
+
+            span {
+                &:not(:first-child) {
+                    margin-left: 5px;
+                }
+            }
+        }
+    }
+
+    &__content {
+        font-size: 14px;
+
+        ul {
+            li {
+                display: flex;
+                align-items: center;
+                line-height: 24px;
+
+                label {
+                    width: 80px;
+                    color: #999;
+                }
+
+                span {
+                    flex: 1;
+                }
+            }
+        }
+    }
+}

+ 25 - 21
src/packages/sbyj/views/inventory/components/logs/index.vue

@@ -6,43 +6,43 @@
             </template>
             <app-pull-refresh ref="pullRefreshRef" v-model:loading="loading" v-model:error="error"
                 v-model:pageIndex="pageIndex" :page-count="pageCount" @refresh="run">
-                <div class="g-order-list">
-                    <div class="g-order-list__box" v-for="(item, index) in dataList" :key="index">
-                        <div class="g-order-list__titlebar">
+                <div class="order-list">
+                    <div class="order-list__box" v-for="(item, index) in dataList" :key="index">
+                        <div class="order-list__titlebar">
                             <div class="left">
-                                <h4>
-                                    {{ formatDate(item.applytime) }}
-                                </h4>
+                                <h4>{{ item.goodscode }}/{{ item.goodsname }}</h4>
+                                <span>{{ formatDate(item.applytime) }}</span>
                             </div>
                             <div class="right">
-                                <span :class="item.inouttype === 1 ? 'g-price-up' : 'g-price-down'">{{ getInoutTypeName(item.inouttype) }}{{ item.inouttype === 1 ? '' : getAppointmentModelOutName(item.inoutmodel) }}</span>
-                                <span style="padding-left: 5px;">{{ getInoutApplyStatusName(item.applystatus) }}</span>
+                                <span :class="item.inouttype === 1 ? 'g-price-up' : 'g-price-down'">
+                                    {{ getInoutTypeName(item.inouttype) }}
+                                </span>
+                                <span class="g-price-down" v-if="item.inouttype !== 1">
+                                    {{ getAppointmentModelOutName(item.inoutmodel) }}
+                                </span>
+                                <span>{{ getInoutApplyStatusName(item.applystatus) }}</span>
                             </div>
                         </div>
-                        <div class="g-order-list__content">
+                        <div class="order-list__content">
                             <ul>
                                 <li>
-                                    <span>商品:</span>
-                                    <span>{{ item.goodscode }}/{{ item.goodsname }}</span>
-                                </li>
-                                <li>
-                                    <span>数量:</span>
+                                    <label>数量</label>
                                     <span>{{ formatDecimal(item.qty) }}{{ item.goodunit }}</span>
                                 </li>
                                 <li>
-                                    <span>备注:</span>
-                                    <span>{{ item.remark }}</span>
+                                    <label>实际</label>
+                                    <span>{{ item.inrealqty }}{{ item.goodunit }}</span>
                                 </li>
                                 <li>
-                                    <span>实际:</span>
-                                    <span>{{ item.inrealqty }}{{ item.goodunit }}</span>
+                                    <label>备注</label>
+                                    <span>{{ item.remark }}</span>
                                 </li>
                                 <li>
-                                    <span>审核时间:</span>
+                                    <label>审核时间</label>
                                     <span>{{ item.applystatus === 2 ? formatDate(item.audittime) : "--" }}</span>
                                 </li>
                                 <li>
-                                    <span>审核备注:</span>
+                                    <label>审核备注</label>
                                     <span>{{ item.auditremark }}</span>
                                 </li>
                             </ul>
@@ -90,4 +90,8 @@ const closed = (isRefresh = false) => {
 defineExpose({
     closed,
 })
-</script>
+</script>
+
+<style lang="less" scoped>
+@import './index.less';
+</style>

+ 8 - 12
src/packages/sbyj/views/inventory/index.vue

@@ -7,17 +7,13 @@
             v-model:pageIndex="pageIndex" :page-count="pageCount" @refresh="run">
             <div class="g-order-list">
                 <div class="g-order-list__box" v-for="(item, index) in dataList" :key="index">
-                    <div class="g-order-list__content">
-                        <ul>
-                            <li>
-                                <span>商品:</span>
-                                <span>{{ item.goodscode }}/{{ item.goodsname }}</span>
-                            </li>
-                            <li>
-                                <span>数量:</span>
-                                <span>{{ item.curqty }}{{ item.goodunit }}</span>
-                            </li>
-                        </ul>
+                    <div class="g-order-list__titlebar">
+                        <div class="left">
+                            <h4>{{ item.goodscode }}/{{ item.goodsname }}</h4>
+                        </div>
+                        <div class="right">
+                            <span>数量:{{ item.curqty }}{{ item.goodunit }}</span>
+                        </div>
                     </div>
                     <div class="g-order-list__btnbar">
                         <Button size="small" @click="showComponent('inOut', item, 1)" round>入库申请</Button>
@@ -48,7 +44,7 @@ const componentMap = new Map<string, unknown>([
 const error = shallowRef(false)
 const dataList = shallowRef<Model.UserGoodsInventoryRsp[]>([])
 const selectedRow = shallowRef<Model.UserGoodsInventoryRsp>()
-const inOutType = shallowRef(1) 
+const inOutType = shallowRef(1)
 
 const { componentRef, componentId, openComponent, closeComponent } = useComponent()
 

+ 1 - 1
src/packages/sbyj/views/mine/index.vue

@@ -78,7 +78,7 @@
                     <Iconfont label-direction="bottom" icon="g-icon-pickup--line">提料订单</Iconfont>
                 </li>
                 <li @click="routerTo('inventory-list')">
-                    <Iconfont label-direction="bottom" icon="g-icon-fwrx">我的库存</Iconfont>
+                    <Iconfont label-direction="bottom" icon="g-icon-inventory">我的库存</Iconfont>
                 </li>
             </ul>
         </app-block>

+ 1 - 1
src/packages/sbyj/views/order/list/index.vue

@@ -1,5 +1,5 @@
 <template>
-    <app-view>
+    <app-view flex>
         <template #header>
             <app-navbar title="我的订单">
                 <template #right>

+ 2 - 0
src/packages/tss/views/user/login/Index.vue

@@ -34,6 +34,8 @@
       <div class="login-footer__trem" style="padding-top: 10px;">
         <Checkbox shape="square" icon-size="16px" v-model="checked">{{ $t('user.login.checked') }}</Checkbox>
         <span @click="routerTo('rules-zcxy')">{{ $t('user.login.ruleszcxy') }}</span>
+        <span>,</span>
+        <span @click="routerTo('rules-yszc')">{{ $t('user.login.rulesyszc') }}</span>
       </div>
       <div class="button-submit">
         <Button type="danger" native-type="submit" block>{{ $t('user.login.login') }}</Button>

Vissa filer visades inte eftersom för många filer har ändrats