Просмотр исходного кода

Merge branch 'developer' of http://git.caimei365.com/zhengjinyi/caimei-applets-mcare into developer

zhengjinyi 2 лет назад
Родитель
Сommit
3899f2d6af

+ 20 - 2
pages/goods/components/cm-special.vue

@@ -5,9 +5,11 @@
         </view>
         <view class="special_title">
             <view class="title">
-                {{activeImage.topic}}
+                {{activeImage.topic | subText(25)}}
+            </view>
+            <view class="">
+                <button class="special_btn">查看详情</button>
             </view>
-            <button class="special_btn">查看详情</button>
         </view>
     </view>
 </template>
@@ -23,6 +25,17 @@
         data() {
             return {}
         },
+        filters: {
+            subText(str, index) {
+                if(str) {
+                    if (str.length <= index) {
+                        return str
+                    }
+                    return str.substring(0, index) + '...'
+                }
+                return str
+            }
+        },
         methods: {
             activeProduct() {
                 uni.navigateTo({
@@ -67,5 +80,10 @@
         background-color: #F3B574;
         color: #FFFFFF;
         font-size: 24rpx;
+        width: 128rpx;
+        height: 48rpx;
+        text-align: center;
+        display: flex;
+        align-items: center;
     }
 </style>

+ 33 - 45
pages/goods/components/procurement_card.vue

@@ -1,14 +1,14 @@
 <template>
     <view class="card">
         <view @click="$emit('procureDetail', procuretInfo)">
-            <view class="card_title" @click="$emit('procureDetail', procuretInfo)">
+            <view class="card_title">
                 <view class="card_user_icon">发起者</view>
-                <view class="card_user">{{ procuretInfo.userName | subText(12) }}</view>
+                <view class="card_user">{{ procuretInfo.userName | subText(10) }}</view>
             </view>
             <view class="card_time">{{ procuretInfo.saveTime }}</view>
-            <view class="card_content" @click="$emit('procureDetail', procuretInfo)">
+            <view class="card_content">
                 <image class="card_content_img" :src="procuretInfo.productImage" mode="aspectFill"></image>
-                <view class="card_content_title">{{ procuretInfo.productName | subText(22) }}</view>
+                <view class="card_content_title">{{ procuretInfo.productName }}</view>
             </view>
             <view class="card_form">
                 <view class="form">
@@ -21,18 +21,21 @@
                     <view class="form_title">采购数量:</view>
                     <view class="form_price">{{ procuretInfo.number }}</view>
                 </view>
-                <view class="form_title">></view>
+                <view class="form_title iconfont icon-xiangyou"></view>
             </view>
-            <view class="card_form">
+            <view
+                class="card_form"
+
+            >
                 <view class="form">
                     <view class="form_title">参与机构数:</view>
                     <view class="form_price">{{ procuretInfo.partNumber || 0 }}</view>
                 </view>
             </view>
         </view>
-        
-        <view v-if="!procurementStatus('isDelFlag') && !procurementStatus('isAchieve')">
-            <view class="card_foot" v-if="procurementStatus('isSelfParticipationTab')">
+
+        <view v-if="!procurementStatus('isDelFlag', procuretInfo.delFlag) && !procurementStatus('isAchieve', procuretInfo.isAchieve)">
+            <view class="card_foot" v-if="procurementStatus('isSelfParticipationTab', proTabId)">
                 <view class="foot_continue">
                     <view class="foot_change" @click="procurementChange">修改</view>
                     <view class="foot_delete" @click="procurementDelete" v-if="proTabId === 2">删除</view>
@@ -40,39 +43,39 @@
                 </view>
                 <view class="foot_title" v-if="proTabId === 1">您已参与</view>
             </view>
-            <view v-if="procurementStatus('isAllTab') && !procurementStatus('isInvolved', 2)">
-                <view
-                    class="card_foot_2"
-                    @click="procurementAdd"
-                    v-if="procurementStatus('isInvolved', 0)"
-                >
+            <view v-if="procurementStatus('isAllTab', proTabId) && !procurementStatus('isInvolved', procuretInfo.isInvolved)">
+                <view class="card_foot_2" @click="procurementAdd" v-if="procuretInfo.isInvolved === 0">
                     <view class="foot_title">我要参与</view>
                 </view>
-                <view class="card_foot_2" v-else>
-                    <view class="foot_title_2" >您已参与</view>
-                </view>
+                <view class="card_foot_2" v-else><view class="foot_title_2">您已参与</view></view>
             </view>
         </view>
         <view class="card_status">
             <image
-                v-if="procurementStatus('isAchieve')"
+                v-if="procurementStatus('isAchieve', procuretInfo.isAchieve)"
                 style="width: 100%;height: 100%;"
                 src="@/static/procurement/success.png"
                 mode="aspectFill"
             ></image>
             <image
-                v-if="procurementStatus('isDelFlag')"
+                v-if="procurementStatus('isDelFlag', procuretInfo.delFlag)"
                 style="width: 100%;height: 100%;"
                 src="@/static/procurement/delete.png"
                 mode="aspectFill"
             ></image>
         </view>
-        <view class="card_bg" v-if="procurementStatus('isDelFlag')" @click="$emit('procureDetail', procuretInfo)"></view>
+        <view
+            class="card_bg"
+            v-if="procurementStatus('isDelFlag', procuretInfo.delFlag)"
+            @click="$emit('procureDetail', procuretInfo)"
+        ></view>
     </view>
 </template>
 
 <script>
+import procurementMixins from '../mixins/procurementMixins.js'
 export default {
+    mixins: [procurementMixins],
     props: {
         procuretInfo: {
             type: Object,
@@ -89,14 +92,6 @@ export default {
             card: {}
         }
     },
-    filters: {
-        subText(str, index) {
-            if (str.length <= index) {
-                return str
-            }
-            return str.substring(0, index) + '...'
-        }
-    },
     computed: {},
     watch: {},
     mounted() {},
@@ -119,19 +114,6 @@ export default {
         procurementExit() {
             this.$emit('modelData', this.procuretInfo)
         },
-        // 各部分状态
-        procurementStatus(string, res) {
-            const procuretInfo = this.procuretInfo
-            const status = {
-                isDelFlag: () => procuretInfo.delFlag == 1, // 是否删除
-                isAchieve: () => procuretInfo.isAchieve == 1, // 是否实现
-                isAllTab: () => this.proTabId === 0, // 是否在全部的tab栏下
-                isInvolved: res => procuretInfo.isInvolved === res, // 是否参与 0 未参与 1已参与 2 我创建的
-                isAdd: () => procuretInfo.isInvolved === 2, // 是否是自身创建的
-                isSelfParticipationTab: () => this.proTabId > 0, // 是否在已参与tab栏 是否在自已发布的tab中
-            }
-            return status[string](res)
-        }
     }
 }
 </script>
@@ -141,7 +123,7 @@ export default {
     border-radius: 8rpx;
     width: 100%;
     background: #fff;
-    padding: 32rpx;
+    padding: 32rpx 32rpx 8rpx 32rpx;
     box-sizing: border-box;
     position: relative;
 }
@@ -192,16 +174,22 @@ export default {
 .card .card_content_img {
     width: 136rpx;
     height: 136rpx;
-    border-radius: 8rpx;
+    border: 1px dotted #333333;
+    box-sizing: border-box;
+    margin-right: 24rpx;
 }
 .card_content .card_content_title {
     width: 442rpx;
     height: 85rpx;
     font-size: 26rpx;
-    font-family: PingFangSC-Regular, PingFang SC;
     font-weight: 400;
     color: #333333;
     line-height: 48rpx;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    display: -webkit-box; // 弹性盒模型
+    -webkit-box-orient: vertical; // 上下垂直
+    -webkit-line-clamp: 2; // 行数
 }
 .card .card_form {
     margin-bottom: 32rpx;

+ 0 - 3
pages/goods/components/upload.vue

@@ -29,9 +29,7 @@
         },
         watch: {
             imageData(val) {
-                console.log(val)
                 if (val) {
-                    console.log(val)
                     this.imageUrl = val
                 }
             }
@@ -42,7 +40,6 @@
                     const {data} = await uploadFileImage()
                     this.imageUrl = JSON.parse(data).data
                     this.$emit('uploadImg', JSON.parse(data).data)
-                    console.log(this.imageUrl)
                 }catch(error){
                     console.log(error)
                 }

+ 52 - 0
pages/goods/mixins/procurementMixins.js

@@ -0,0 +1,52 @@
+export default {
+    filters: {
+        subText(str, index) {
+            if(str) {
+                if (str.length <= index) {
+                    return str
+                }
+                return str.substring(0, index) + '...'
+            }
+            return str
+        }
+    },
+    methods: {
+        // 校验 只能输入数字和小数点
+        fpNumInput(e, str) {
+            const o = e.target
+            const inputRule = /[^\d.]/g //修改inputRule 的值
+            this.$nextTick(() => {
+                this[str].price = o.value.replace(inputRule, '')
+                if (o.value[0] == '.') {
+                    this[str].price = ''
+                } else if (o.value[0] == '0' && o.value[1] == '0') {
+                    this[str].price = '0'
+                }
+                this[str].price = this[str].price.replace('.', '$#$').replace(/\./g, '').replace('$#$', '.') // 只能输入一个小数点
+            })
+        },
+        // 校验 只能输入数字
+        NumberInput(e, str) {
+            const o = e.target
+            const inputRule = /[^\d]/g //修改inputRule 的值
+            this.$nextTick(() => {
+                this[str].number = o.value.replace(inputRule, '')
+                if (o.value[0] == '0') {
+                    this[str].number = ''
+                }
+            })
+        },
+        // 状态
+        procurementStatus(str, res) {
+            const form = {
+                isDelFlag: () => res == 1, // 是否删除
+                isAchieve: () => res == 1, // 是否实现
+                isAllTab: () => res === 0, // 是否在全部的tab栏下
+                isSelfParticipationTab: () => res > 0, // 是否在已参与tab栏 是否在自已发布的tab中
+                isInvolved: () => res === 2, // 是否我创建的
+                isAdd: () => res === 1, // 是否参与
+            }
+            return form[str]()
+        },
+    }
+}

+ 87 - 85
pages/goods/procurement.vue

@@ -21,8 +21,8 @@
                     :procuretInfo="item"
                     @popupAdd="popupAdd"
                     @popupChange="popupChange"
-                    @proDelete='proDelete'
-                    @procureDetail='procureDetail'
+                    @proDelete="proDelete"
+                    @procureDetail="procureDetail"
                 />
             </view>
         </view>
@@ -62,7 +62,13 @@
                         </view>
                         <view style="position: relative;">
                             <view class="input_icon">¥</view>
-                            <input class="uni-input" type="number" focus v-model="joinData.price" />
+                            <input
+                                class="uni-input"
+                                type="number"
+                                focus
+                                v-model="joinData.price"
+                                @input="fpNumInput($event, 'joinData')"
+                            />
                         </view>
                     </view>
                     <view class="uni-form-item uni-column">
@@ -71,7 +77,13 @@
                             采购数量:
                         </view>
                         <view style="position: relative;">
-                            <input class="uni-input" type="number" focus v-model="joinData.number" />
+                            <input
+                                class="uni-input"
+                                type="number"
+                                focus
+                                v-model="joinData.number"
+                                @input="NumberInput($event, 'joinData')"
+                            />
                         </view>
                     </view>
                     <view class="submit_btn">
@@ -94,11 +106,12 @@
 import proCard from './components/procurement_card.vue'
 import jumpMixins from '@/mixins/jumpMixins.js'
 import { mapState } from 'vuex'
+import procurementMixins from './mixins/procurementMixins.js'
 export default {
     components: {
         proCard
     },
-    mixins: [jumpMixins],
+    mixins: [jumpMixins, procurementMixins],
     data() {
         return {
             skeletonShow: true, // loading
@@ -133,20 +146,21 @@ export default {
                     plain: false
                 }
             ],
-            // 组件传递集采需求
-            proDataInfo: {},
+            proDataInfo: {}, // 弹窗prodata
             popupShow: false, // 底部上移栏
             loadding: true, // 下拉刷新
             pullUpOn: true, // 下拉刷新
             // 分页参数
             pageInfo: {
                 pageNo: 1,
-                pageSize: 10
+                pageSize: 10,
+                userId: '',
+                status: 0
             },
             // 我参与的数据请求
             participate: {
                 userId: '',
-                procurementType: 0,
+                procurementType: 0
             },
             // 删除退出
             deleteData: {
@@ -157,25 +171,11 @@ export default {
             // 所有数据
             procurementList: [],
             // 下拉刷新
-            nomoreText: '已经被掏空了~',
+            nomoreText: '已经没有了~',
             userInfo: {},
             isLastPage: false, // 是否是最后一页
             joinData: {}, // 我要参与
-        }
-    },
-    watch: {
-        currentTab(val) {
-            this.loadding = true
-            this.pullUpOn = true
-            this.pageInfo.pageNo =1
-            if (val>0) {
-                this.participate.procurementType = --val
-                this.procurementTabChange()
-            } else {
-                this.isLastPage = false
-                this.pageInfo.pageNo = 1
-                this.procurementAllList()
-            }
+            isEditDetail: false // 是否修改详情
         }
     },
     computed: {
@@ -183,44 +183,54 @@ export default {
         ...mapState(['hasLogin'])
     },
     onShow() {
-        if (uni.getStorageSync('userInfo')) {
-            this.userInfo = uni.getStorageSync('userInfo')
-            this.pageInfo.userId = this.userInfo.userId
-            this.participate.userId = this.userInfo.userId
-            this.procurementAllList()
-        } else {
-            this.$api.redirectTo('/pages/login/login')
+        if(this.hasLogin){
+        	this.userInfo = uni.getStorageSync('userInfo')
+        	this.pageInfo.userId = this.userInfo.userId
+        	this.participate.userId = this.userInfo.userId
+        	this.procurementAllList()
+        }else{
+        	this.$api.redirectTo('/pages/login/login')
         }
     },
     onLoad() {
-        uni.$on('refreshAddData',() => {
+        uni.$on('refreshAddData', () => {
             this.procurementAllAddList()
         })
-        uni.$on('refreshChangeData', () => {
-            this.procurementTabChange()
-        })
     },
     onReachBottom() {
         if (!this.isLastPage) {
-            this.pageInfo.pageNo+=1
+            this.loadding = true
+            this.pullUpOn = true
+            this.pageInfo.pageNo += 1
             this.procurementAllList()
         }
     },
-    
+    onPullDownRefresh() {
+        this.procurementList = []
+        this.procurementAllList()
+        uni.stopPullDownRefresh()
+    },
     methods: {
         // tab 切换
         handlerTabs($event) {
+            this.isLastPage = false
+            this.procurementList = []
             this.currentTab = $event.index
+            this.loadding = true
+            this.pullUpOn = true
+            this.pageInfo.pageNo = 1
+            this.pageInfo.status = $event.index
+            this.procurementAllList()
         },
         // 弹窗确认或取消
         handleClick($event) {
             if ($event.index === 1) {
-                if(this.proDataInfo.isInvolved === 1) {
+                if (this.proDataInfo.isInvolved === 1) {
                     // 退出参与
-                    this.procurementUpdate(1)
-                } else{
+                    this.procurementUpdate(1, this.proDataInfo.sid)
+                } else {
                     // 删除
-                    this.procurementUpdate(0)
+                    this.procurementUpdate(0, this.proDataInfo.id)
                 }
             }
             this.modal = false
@@ -238,18 +248,18 @@ export default {
         },
         // 我要参与
         popupAdd($event) {
-            this.joinData = Object.assign($event, {number: '', price: '', userId: this.userInfo.userId})
+            this.joinData = Object.assign($event, { userId: this.userInfo.userId })
             this.popupShow = true
         },
         // 修改
         popupChange($event) {
             this.joinData = $event
             console.log($event)
-            if(this.joinData.isInvolved === 1) {
+            if (this.joinData.isInvolved === 1) {
                 this.procurementEditData()
             } else {
                 uni.navigateTo({
-                    url: '/pages/goods/procurementAdd?id='+$event.sid
+                    url: '/pages/goods/procurementAdd?id=' + $event.id
                 })
             }
         },
@@ -268,7 +278,7 @@ export default {
         // 详情
         procureDetail($event) {
             uni.navigateTo({
-                url: `/pages/goods/procurement_info?id=${$event.sid}&proTabId=${this.currentTab}`
+                url: `/pages/goods/procurement_info?id=${$event.id}&proTabId=${this.currentTab}`
             })
         },
         /**
@@ -278,11 +288,11 @@ export default {
         async procurementAllList() {
             if (!this.isLastPage) {
                 try {
-                    const {data} = await this.ProcurementService.procurementAllList(this.pageInfo)
-                    this.procurementList = data.list
-                    this.isLastPage = data.isLastPage
-                    this.loadding = !data.isLastPage
-                    this.pullUpOn = !data.isLastPage
+                    const { data } = await this.ProcurementService.procurementAllList(this.pageInfo)
+                    this.procurementList = [...this.procurementList, ...data.list]
+                    this.isLastPage = data.total === this.procurementList.length
+                    this.loadding = !this.isLastPage
+                    this.pullUpOn = !this.isLastPage
                     this.skeletonShow = false
                 } catch (error) {
                     console.log(error)
@@ -294,36 +304,25 @@ export default {
             const form = {
                 pageNo: 1,
                 userId: this.userInfo.userId,
-                pageSize: this.pageInfo.pageNo*this.pageInfo.pageSize
+                pageSize: this.pageInfo.pageNo * this.pageInfo.pageSize,
+                status: this.currentTab
             }
             try {
-                const {data} = await this.ProcurementService.procurementAllList(form)
+                const { data } = await this.ProcurementService.procurementAllList(form)
                 this.procurementList = data.list
-                this.isLastPage = data.isLastPage
-                this.loadding = !data.isLastPage
-                this.pullUpOn = !data.isLastPage
+                this.isLastPage = data.total === this.procurementList.length
+                this.loadding = !this.isLastPage
+                this.pullUpOn = !this.isLastPage
             } catch (error) {
                 console.log(error)
             }
         },
-        // 我参与的 | 我发起的
-        async procurementTabChange() {
-            try{
-                const {data} = await this.ProcurementService.procurementTabChange(this.participate)
-                this.procurementList = data
-                this.loadding = false
-                this.pullUpOn = false
-                this.skeletonShow = false
-            }catch(error){
-                console.log(error)
-            }
-        },
         // 我要参与
         async procurementParticipate() {
-            if(this.joinData.price === '') {
+            if (this.joinData.price === '') {
                 return this.$util.msg('请输入期望单价', 2000)
             }
-            if(this.joinData.number === '') {
+            if (this.joinData.number === '') {
                 return this.$util.msg('请输入期望数量', 2000)
             }
             const form = {
@@ -331,39 +330,42 @@ export default {
                 productImage: this.joinData.productImage,
                 productName: this.joinData.productName,
                 price: this.joinData.price,
-                number: this.joinData.number
+                number: this.joinData.number,
+                status: 0,
+                id: this.joinData.id
+            }
+            if (this.joinData.isInvolved === 1) {
+                form.id = this.joinData.id
+                form.status = 1 // 0参与 1 修改
             }
-            try{
+            try {
                 const data = await this.ProcurementService.procurementParticipate(form)
-                if (this.joinData.isInvolved === 0) {
-                    this.procurementAllAddList()
-                } else {
-                    this.procurementTabChange()
-                }
+                this.procurementAllAddList()
                 this.popupShow = false
+                this.isEditDetail = false
                 uni.showToast({
-                    title:`${this.joinData.isInvolved === 0 ? '参与' : '修改'}成功`,
+                    title: `${this.joinData.isInvolved === 0 ? '参与' : '修改'}成功`,
                     icon: 'success'
                 })
-            }catch(error){
+            } catch (error) {
                 console.log(error)
             }
         },
         // 删除 退出
-        async procurementUpdate(type) {
+        async procurementUpdate(type, id) {
             const form = {
                 id: `${this.proDataInfo.sid}`,
                 userId: this.userInfo.userId,
                 procurementType: type
             }
-            try{
+            try {
                 await this.ProcurementService.procurementUpdate(form)
-                this.procurementTabChange()
+                this.procurementAllAddList()
                 uni.showToast({
                     title: `${type === 0 ? '删除' : '退出'}成功`,
                     icon: 'success'
                 })
-            }catch(error){
+            } catch (error) {
                 console.log(error)
             }
         },
@@ -374,11 +376,11 @@ export default {
                 userId: this.userInfo.userId,
                 procurementType: 0
             }
-            try{
+            try {
                 const data = await this.ProcurementService.procurementEditData(form)
                 this.joinData = data.data
                 this.popupShow = true
-            }catch(error){
+            } catch (error) {
                 console.log(error)
             }
         }

+ 25 - 16
pages/goods/procurementAdd.vue

@@ -18,6 +18,7 @@
                         focus
                         placeholder="请输入想要采购的商品名称"
                         v-model="formData.productName"
+                        maxlength="30"
                     />
                     <!-- <small>请输入商品名称</small> -->
                 </view>
@@ -34,6 +35,8 @@
                         focus
                         placeholder="请输入您对商品的期望单价"
                         v-model="formData.price"
+                        @input="fpNumInput($event, 'formData')"
+                        maxlength="10"
                     />
                 </view>
             </view>
@@ -49,6 +52,8 @@
                         focus
                         placeholder="请输入您的采购数量"
                         v-model="formData.number"
+                        @input="NumberInput($event, 'formData')"
+                        maxlength="10"
                     />
                 </view>
             </view>
@@ -76,11 +81,13 @@
 import proBtn from './components/procurement-btn.vue'
 import proUpload from './components/upload.vue'
 import { mapState } from 'vuex'
+import procurementMixins from './mixins/procurementMixins.js'
 export default {
     components: {
         proUpload,
         proBtn
     },
+    mixins: [procurementMixins],
     data() {
         return {
             // 发布需求
@@ -140,9 +147,13 @@ export default {
         // 发布按钮
         activeBtn() {
             if (this.formData.productName === '' || this.formData.price === '' || this.formData.number === '') {
-                this.isActive = false
+                setTimeout(() => {
+                    this.isActive = false
+                }, 300)
             } else {
-                this.isActive = true
+                setTimeout(() => {
+                    this.isActive = true
+                }, 200)
             }
         },
         // 图片上传
@@ -157,31 +168,29 @@ export default {
         },
         // submit 发布
         async handlerSave() {
-            console.log(this.formData)
+            const form = {
+                userId: this.userInfo.userId,
+                productImage: this.formData.productImage,
+                productName: this.formData.productName,
+                price: this.formData.price,
+                number: this.formData.number,
+                userName: this.formData.userName,
+            }
             if (this.detailData.id) {
-                this.formData.id = this.detailData.id
+                form.id = this.detailData.id
             }
             try {
-                const data = await this.ProcurementService.procurementSave(this.formData)
+                const data = await this.ProcurementService.procurementSave(form)
                 uni.showToast({
                     title: `${this.detailData.id ? '修改' : '发布'}成功`,
                     icon: 'success'
                 })
-                console.log(this.currentTab)
                 setTimeout(() => {
                     uni.navigateBack({
                         data: 1
                     })
-                }, 2000)
-                if (this.currentTab === 0) {
-                    uni.$emit('refreshAddData') // 刷新修改的数据
-                }
-                if (this.currentTab > 0) {
-                    uni.$emit('refreshChangeData')
-                }
-                if (this.detailData.id) {
-                    uni.$emit('refreshChangeData') // 刷新修改的数据
-                }
+                }, 800)
+                uni.$emit('refreshAddData', this.detailData.id) // 刷新修改的数据
             } catch (error) {
                 console.log(error)
             }

+ 81 - 54
pages/goods/procurement_info.vue

@@ -13,9 +13,9 @@
                 <view class="card_line"></view>
                 <view class="card_store">
                     <image class="img" :src="procurement.productImage" mode="aspectFill"></image>
-                    <view class="store_title">{{procurement.productName}}</view>
+                    <view class="store_title">{{ procurement.productName }}</view>
                 </view>
-                <view class="back-filter" v-if="procurementStatus('isDelFlag')"></view>
+                <view class="back-filter" v-if="procurementStatus('isDelFlag', procurement.delFlag)"></view>
             </view>
             <view class="info_Initiator">
                 <view class="card_title">发起者需求</view>
@@ -23,16 +23,16 @@
                 <view class="Initiator_contant">
                     <view class="Initiator_name">
                         <view class="Initiator_icon">发起者</view>
-                        <view class="user">{{procurement.userName}}</view>
+                        <view class="user">{{ procurement.userName | subText(10) }}</view>
                     </view>
                     <view class="Initiator_price">
                         <view class="unit_price">
                             <view class="title">期望单价:</view>
-                            <view class="price">¥{{procurement.price}}</view>
+                            <view class="price">¥{{ procurement.price }}</view>
                         </view>
                         <view class="unit_sum">
                             <view class="title">采购数量:</view>
-                            <view class="price">{{procurement.number}}</view>
+                            <view class="price">{{ procurement.number }}</view>
                         </view>
                     </view>
                 </view>
@@ -41,16 +41,16 @@
                         style="width: 100%;height: 100%;"
                         src="@/static/procurement/success.png"
                         mode="aspectFill"
-                        v-if="procurementStatus('isAchieve')"
+                        v-if="procurementStatus('isAchieve', procurement.isAchieve)"
                     ></image>
                     <image
                         style="width: 100%;height: 100%;"
                         src="@/static/procurement/delete.png"
                         mode="aspectFill"
-                        v-if="procurementStatus('isDelFlag')"
+                        v-if="procurementStatus('isDelFlag', procurement.delFlag)"
                     ></image>
                 </view>
-                <view class="back-filter" v-if="procurementStatus('isDelFlag')"></view>
+                <view class="back-filter" v-if="procurementStatus('isDelFlag', procurement.delFlag)"></view>
             </view>
             <view class="info_Participant">
                 <view class="card_title">参与者需求({{ procurementList.length }})</view>
@@ -58,38 +58,57 @@
                 <view v-if="procurementList.length !== 0">
                     <view
                         class="Initiator_contant"
-                        v-for="(item, index) in 3"
+                        v-for="(item, index) in procurementList"
                         :key="item"
                         :style="{ margin: index !== 0 ? '24rpx 8rpx 16rpx 8rpx' : '40rpx 8rpx 16rpx 8rpx' }"
                     >
                         <view class="Initiator_name">
                             <view class="Initiator_icon">参与者</view>
-                            <view class="user">{{item.userName}}</view>
+                            <view class="user">{{ item.userName | subText(12) }}</view>
                         </view>
                         <view class="Initiator_price">
                             <view class="unit_price">
                                 <view class="title">期望单价:</view>
-                                <view class="price">¥{{procurement.price}}</view>
+                                <view class="price">¥{{ procurement.price }}</view>
                             </view>
                             <view class="unit_sum">
                                 <view class="title">采购数量:</view>
-                                <view class="price">{{procurement.number}}</view>
+                                <view class="price">{{ procurement.number }}</view>
                             </view>
                         </view>
                     </view>
                 </view>
                 <view class="empty" v-else>暂无参与者~</view>
-                <view class="back-filter" v-if="procurementStatus('isDelFlag')"></view>
+                <view class="back-filter" v-if="procurementStatus('isDelFlag', procurement.delFlag)"></view>
             </view>
         </view>
-        <view v-if="!procurementStatus('isDelFlag') && !procurementStatus('isAchieve')">
-            <view class="info_btn" v-if="!procurementStatus('isInvolved') && !procurementStatus('isAdd')">
+        <view
+            v-if="
+                !procurementStatus('isDelFlag', procurement.delFlag) &&
+                    !procurementStatus('isAchieve', procurement.isAchieve)
+            "
+        >
+            <view
+                class="info_btn"
+                v-if="
+                    !procurementStatus('isInvolved', procurement.isInvolved) &&
+                        !procurementStatus('isAdd', procurement.isInvolved)
+                "
+            >
                 <proBtn color="#FFFFFF" background="#F3B574" width="640rpx" @click="popupAdd">我要参与</proBtn>
             </view>
             <view class="info_btn" v-else>
-                <proBtn @click="procurementDelete" v-if="procurementStatus('isInvolved')">删除</proBtn>
+                <proBtn @click="procurementDelete" v-if="procurementStatus('isInvolved', procurement.isInvolved)">
+                    删除
+                </proBtn>
                 <proBtn @click="modelData" v-else>退出</proBtn>
-                <proBtn color="#FFFFFF" background="#F3B574" @click="procurementChange(procurementStatus('isInvolved'))">修改</proBtn>
+                <proBtn
+                    color="#FFFFFF"
+                    background="#F3B574"
+                    @click="procurementChange(procurementStatus('isInvolved', procurement.isInvolved))"
+                >
+                    修改
+                </proBtn>
             </view>
         </view>
         <tui-bottom-popup :zIndex="1002" :maskZIndex="1001" :show="popupShow" @close="handlerPopupClose">
@@ -149,7 +168,9 @@
 
 <script>
 import proBtn from './components/procurement-btn.vue'
+import procurementMixins from './mixins/procurementMixins.js'
 export default {
+    mixins: [procurementMixins],
     components: {
         proBtn
     },
@@ -158,7 +179,6 @@ export default {
             procurementList: [], // 参与者数量
             procurement: {}, // 发起者需求
             skeletonShow: true, // loading
-            joinData: {},
             modal: false,
             contentModalText: '',
             // 弹窗配置
@@ -181,27 +201,21 @@ export default {
             userInfo: {},
             popupShow: false, // 底部上移栏
             proTabId: '', // tab id
+            detailId: '' // 详情id
         }
     },
     onLoad(options) {
         this.userInfo = uni.getStorageSync('userInfo')
         this.procurementDetail(options.id)
+        this.detailId = options.id
         this.proTabId = options.proTabId
+        uni.$on('refreshAddData', id => {
+            if (id) {
+                this.procurementDetail(id)
+            }
+        })
     },
     methods: {
-        // 状态
-        procurementStatus(str) {
-            const userIdList = this.procurementList.map(i => i.userId)
-            const form = {
-                isDelFlag: () => this.procurement.delFlag == 1, // 是否删除
-                isAchieve: () => this.procurement.isAchieve == 1, // 是否实现
-                isAllTab: () => this.proTabId === 0, // 是否在全部的tab栏下
-                isSelfParticipationTab: () => this.proTabId > 0, // 是否在已参与tab栏 是否在自已发布的tab中
-                'isInvolved': () => this.procurement.createUserId === this.userInfo.userId, // 是否我创建的
-                'isAdd': () => userIdList.some(i => i === this.userInfo.userId), // 是否参与
-            }
-            return form[str]()
-        },
         // 删除
         procurementDelete() {
             this.contentModalText = '确定删除该需求吗?'
@@ -210,10 +224,10 @@ export default {
         },
         handleClick($event) {
             if ($event.index === 1) {
-                if(this.joinData.isInvolved === 1) {
+                if (this.joinData.isInvolved === 1) {
                     // 退出参与
                     this.procurementUpdate(1)
-                } else{
+                } else {
                     // 删除
                     this.procurementUpdate(0)
                 }
@@ -227,7 +241,7 @@ export default {
         },
         // 我要参与
         popupAdd() {
-            this.joinData = Object.assign(this.procurement, {number: '', price: '', userId: this.userInfo.userId})
+            this.joinData = this.procurement
             this.popupShow = true
         },
         // 组件传递商品详情 退出
@@ -239,7 +253,7 @@ export default {
         procurementChange(status) {
             if (status) {
                 uni.navigateTo({
-                    url: '/pages/goods/procurementAdd?id='+this.procurement.sid
+                    url: '/pages/goods/procurementAdd?id=' + this.procurement.id
                 })
             } else {
                 this.procurementEditData()
@@ -259,58 +273,67 @@ export default {
         // 删除 退出
         async procurementUpdate(type) {
             const form = {
-                id: `${this.joinData.id}`,
+                id: this.detailId,
                 userId: this.userInfo.userId,
                 procurementType: type
             }
-            try{
+            try {
                 await this.ProcurementService.procurementUpdate(form)
-                this.procurementTabChange()
+                this.procurementDetail(this.detailId)
+                uni.$emit('refreshAddData') // 刷新修改的数据
                 uni.showToast({
                     title: `${type === 0 ? '删除' : '退出'}成功`,
                     icon: 'success'
                 })
-            }catch(error){
+            } catch (error) {
                 console.log(error)
             }
         },
         // 我要参与
         async procurementParticipate() {
-            if(this.joinData.price === '') {
+            if (this.joinData.price === '') {
                 return this.$util.msg('请输入期望单价', 2000)
             }
-            if(this.joinData.number === '') {
-                return this.$util.msg('请输入期望数量', 2000)
+            if (this.joinData.number === '') {
+                return this.$util.msg('请输入采购数量', 2000)
             }
             const form = {
                 userId: this.userInfo.userId,
                 productImage: this.joinData.productImage,
                 productName: this.joinData.productName,
                 price: this.joinData.price,
-                number: this.joinData.number
+                number: this.joinData.number,
+                status: 0,
+                id: this.joinData.id
+            }
+            if (this.joinData.isInvolved === 1) {
+                form.id = this.joinData.sid
+                form.status = 1 // 0参与 1 修改
             }
-            try{
-                const data = await this.ProcurementService.procurementParticipate(form)
+            try {
+                await this.ProcurementService.procurementParticipate(form)
+                this.procurementDetail(this.detailId)
+                uni.$emit('refreshAddData') // 刷新修改的数据
                 uni.showToast({
-                    title:`${this.procurement.isInvolved === 0 ? '参与' : '修改'}成功`,
+                    title: `${this.procurement.isInvolved === 0 ? '参与' : '修改'}成功`,
                     icon: 'success'
                 })
-            }catch(error){
+            } catch (error) {
                 console.log(error)
             }
         },
-        // 参与详情
+        // 参与集采详情
         async procurementEditData() {
             const form = {
-                id: `${this.joinData.sid}`,
+                id: `${this.procurement.sid}`,
                 userId: this.userInfo.userId,
                 procurementType: 0
             }
-            try{
+            try {
                 const data = await this.ProcurementService.procurementEditData(form)
                 this.joinData = data.data
                 this.popupShow = true
-            }catch(error){
+            } catch (error) {
                 console.log(error)
             }
         }
@@ -359,6 +382,11 @@ export default {
     font-size: 26rpx;
     color: #333333;
     line-height: 48rpx;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    display: -webkit-box; // 弹性盒模型
+    -webkit-box-orient: vertical; // 上下垂直
+    -webkit-line-clamp: 2; // 行数
 }
 .procure_info .info_Initiator {
     background-color: #fff;
@@ -400,14 +428,13 @@ export default {
     margin-top: 48rpx;
     display: flex;
     align-items: center;
+    justify-content: space-between;
 }
 .Initiator_price .unit_price,
 .Initiator_price .unit_sum {
     display: flex;
     align-items: center;
-}
-.Initiator_price .unit_sum {
-    margin-left: 120rpx;
+    white-space: nowrap;
 }
 .title {
     color: #999999;