zerp 2 سال پیش
والد
کامیت
b969d61d54
7فایلهای تغییر یافته به همراه239 افزوده شده و 64 حذف شده
  1. 2 2
      config/index.js
  2. 1 1
      src/App.vue
  3. 9 0
      src/api/bid.js
  4. 2 1
      src/api/record.js
  5. 12 3
      src/api/tender.js
  6. 26 9
      src/views/bid/index.vue
  7. 187 48
      src/views/tender/index.vue

+ 2 - 2
config/index.js

@@ -21,9 +21,9 @@ module.exports = {
         },
 
         // 本地开发使用   192.168.0.126  localhost
-        host: '192.168.3.43',
+        host: '127.0.0.1',
         // host: '192.168.124.14',
-        port: 8080,
+        port: 8081,
         autoOpenBrowser: true,
         errorOverlay: true,
         notifyOnErrors: false,

+ 1 - 1
src/App.vue

@@ -19,7 +19,7 @@ export default {
 
 ::-webkit-scrollbar-thumb {
   /* background-color: #0f5ef080; */
-  background: linear-gradient(to left,#32e4c663,#0c6ceb71);
+  /* background: linear-gradient(to left,#32e4c663,#0c6ceb71); */
   border-radius: 5px;
   box-shadow: 0 2px 12px 0 rgba(204, 201, 201, 0.1)
 }

+ 9 - 0
src/api/bid.js

@@ -41,3 +41,12 @@ export function getQueryDelete(parms) {
     data: parms
   })
 }
+
+// 下载
+export function loadCustomer(parms) {
+  return request({
+      url: '/bidding/load',
+      method: 'get',
+      params:parms
+  })
+} 

+ 2 - 1
src/api/record.js

@@ -34,4 +34,5 @@ export function editCustomer(data) {
         method: 'put',
         data: data
     })
-} 
+} 
+

+ 12 - 3
src/api/tender.js

@@ -4,7 +4,7 @@ import request from '@/utils/request'
 // 获取列表
 export function getTableList(parms) {
   return request({
-    url: '/bidding/query-by-supplier-id',
+    url: '/tender/search',
     method: 'post',
     data: parms
   })
@@ -20,7 +20,7 @@ export function getQueryId(parms) {
 // 修改列表
 export function getQueryEdit(parms) {
   return request({
-    url: '/tender/update',
+    url: '/bidding/update',
     method: 'post',
     data: parms
   })
@@ -28,8 +28,17 @@ export function getQueryEdit(parms) {
 // 添加列表
 export function getQueryAdd(parms) {
   return request({
-    url: '/tender/new',
+    url: '/bidding/new',
     method: 'post',
     data: parms
   })
 }
+
+// 下载
+export function loadCustomer(parms) {
+  return request({
+      url: '/bidding/load',
+      method: 'get',
+      params:parms
+  })
+} 

+ 26 - 9
src/views/bid/index.vue

@@ -36,14 +36,14 @@
 
       <el-table-column prop="description" :show-overflow-tooltip="true" label="报价方式" width="100" align="center" >
         <template slot-scope="scope">
-            <span v-if="scope.row.priceQuotes == 1">总价</span>
-            <span v-if="scope.row.priceQuotes == 2">单价</span>
+            <el-tag  color="#5783E6" style="border-color:#5783E6" effect="dark" v-if="scope.row.priceQuotes == 1">总价</el-tag>
+            <el-tag effect="dark" color="#82C497" style="border-color:#82C497" v-if="scope.row.priceQuotes == 2">单价</el-tag>
         </template>
       </el-table-column>
       <el-table-column prop="remarks" label="备注" :show-overflow-tooltip="true" align="center" />
       <el-table-column prop="appendix" label="附件" align="center" width="100" >
         <template slot-scope="scope">
-            <el-link type="primary" :href="scope.row.appendix">查看</el-link>
+            <el-button type="text" @click="onLoad(scope.row.appendix)">下载</el-button>
         </template>
       </el-table-column>
       <el-table-column prop="createTime" label="开始时间" align="center" width="160"/>
@@ -171,20 +171,27 @@
 
       <el-table-column label="报价方式"  align="center">
         <template slot-scope="scope">
-          <span v-if="scope.row.priceQuotes == 1">总价</span>
-            <span v-if="scope.row.priceQuotes == 2">单价</span>
+           <el-tag  color="#5783E6" style="border-color:#5783E6" effect="dark" v-if="scope.row.priceQuotes == 1">总价</el-tag>
+            <el-tag effect="dark" color="#82C497" style="border-color:#82C497" v-if="scope.row.priceQuotes == 2">单价</el-tag>
         </template>
       </el-table-column>
 
-      <el-table-column prop="price" :show-overflow-tooltip="true" label="报价金额" align="center" />
+      <el-table-column prop="price" :show-overflow-tooltip="true" label="报价金额" align="center" >
+         <template slot-scope="scope">
+           <div>
+             {{scope.row.price | toThousandFilter}}
+           </div>
+         </template>
+      </el-table-column>
       <el-table-column prop="remarks" label="备注" :show-overflow-tooltip="true" align="center" />
       <el-table-column prop="appendix" label="附件" align="center" width="100" >
         <template slot-scope="scope">
-            <el-link type="primary" :href="scope.row.appendix">查看</el-link>
+            <!-- <el-link type="primary" :href="scope.row.appendix">查看</el-link> -->
+            <el-button type="text" @click="onLoad(scope.row.appendix)">下载</el-button>
         </template>
       </el-table-column>
       <el-table-column prop="createTime" label="投极时间" align="center"/>
-      <el-table-column prop="userId" label=" 投标帐号" align="center"/>
+      <el-table-column prop="userName" label=" 投标帐号" align="center"/>
       <el-table-column prop="status" label=" 投标结果" align="center" >
          <template slot-scope="scope">
           <span v-if="scope.row.status == 0">已提交</span>
@@ -216,7 +223,7 @@
 </template>
 
 <script>
-import { getTableList,getQueryId,getQueryAdd,getQueryEdit,getQueryDelete } from '@/api/bid'
+import { getTableList,getQueryId,getQueryAdd,getQueryEdit,getQueryDelete,loadCustomer } from '@/api/bid'
 
 export default {
   data() {
@@ -277,6 +284,16 @@ console.log(this.bidDate)
       this.bidDate =[]
       console.log(this.form)
     },
+    // 下载
+    onLoad(row){
+        // const params = new URLSearchParams()
+      // params.append('path', row)
+      let a =document.createElement('a')
+      // a.href= /bidding/load
+      let url = window.location.origin + "/bidding/load?path=" + encodeURIComponent(row)
+       a.href = url
+       a.click()
+    },
     // 搜索
       handleFind: function() {
         this.currentPage = 1

+ 187 - 48
src/views/tender/index.vue

@@ -3,23 +3,15 @@
 
     <div class="head-container" style="margin: 10px 0 10px 0;">
       <!-- 搜索 -->
-      <!-- <el-input
-        v-model="query.value"
+      <el-input
+        v-model="query.title"
         clearable
         placeholder="输入搜索内容"
         style="width: 200px;"
         size="small"
         class="filter-item"
       />
-      <el-button class="filter-item" size="small" type="primary" icon="el-icon-search" plain>搜索</el-button>
-      <el-button
-        class="filter-item"
-        size="small"
-        type="primary"
-        icon="el-icon-plus"
-        @click="handleAdd"
-      >发布新标
-      </el-button>-->
+      <el-button class="filter-item" size="small" type="primary" icon="el-icon-search"  @click="handleFind" plain>搜索</el-button>
     </div> 
     <!--表格渲染-->
     <el-table v-loading="loading" :data="data"  style="width: 100%;">
@@ -36,7 +28,9 @@
 
        <el-table-column label="结果"  align="center">
         <template slot-scope="scope">
-          <el-tag type="info" v-if="scope.row.status == 1">未参与</el-tag>
+          <!-- {{scope.row.bidding.status}} -->
+          <el-tag type="info" v-if="scope.row.status == null">未参与</el-tag>
+          <el-tag type="success" v-if="scope.row.status == 0">已提交</el-tag>
           <el-tag type="success" v-if="scope.row.status == 2">已中标</el-tag>
           <el-tag type="danger" v-if="scope.row.status == 3">未中标</el-tag>
         </template>
@@ -44,14 +38,15 @@
 
       <el-table-column prop="description" :show-overflow-tooltip="true" label="报价方式" align="center" >
         <template slot-scope="scope">
-            <span v-if="scope.row.priceQuotes == 1">总价</span>
-            <span v-if="scope.row.priceQuotes == 2">单价</span>
+            <el-tag  color="#5783E6" style="border-color:#5783E6" effect="dark" v-if="scope.row.priceQuotes == 1">总价</el-tag>
+            <el-tag effect="dark" color="#82C497" style="border-color:#82C497" v-if="scope.row.priceQuotes == 2">单价</el-tag>
         </template>
       </el-table-column>
-      <el-table-column prop="remarks" label="备注" align="center" />
+      <el-table-column prop="remarks" label="备注" align="center" :show-overflow-tooltip="true"/>
       <el-table-column prop="appendix" label="附件" align="center" >
         <template slot-scope="scope">
-            <el-link type="primary" :href="scope.row.appendix">查看</el-link>
+            <!-- <el-link type="primary" :href="scope.row.appendix">查看</el-link> -->
+            <el-button type="text" @click="onLoad(scope.row.appendix)">下载</el-button>
         </template>
       </el-table-column>
       <el-table-column prop="endTime" label="截止时间" align="center" />
@@ -59,8 +54,9 @@
 
       <el-table-column label="操作" width="250" align="center">
         <template slot-scope="scope">
-          <el-button slot="reference" type="text" icon="el-icon-edit" @click="handleAdd(scope.row)">投标</el-button>
-          <el-button slot="reference" type="text" icon="el-icon-edit" @click="handleEdit(scope.row)">改标</el-button>
+          <el-button slot="reference" type="text" v-if="scope.row.tenderStatus == 1 && scope.row.status == null" icon="el-icon-edit" @click="handleAdd(scope.row)">投标</el-button>
+          <el-button slot="reference" type="text" v-if="scope.row.tenderStatus == 1 && scope.row.status == 0"  icon="el-icon-edit" @click="handleEdit(scope.row)">改标</el-button>
+            <el-button slot="reference" icon="el-icon-view" type="text" v-if="scope.row.tenderStatus == 2 || scope.row.tenderStatus == 3" @click="handleView(scope.row)">投标详情</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -70,22 +66,26 @@
       <el-pagination
         :current-page.sync="currentPage"
         :page-size="pageSize"
-        layout="total, prev, pager, next, jumper"
+        layout="total, sizes, prev, pager, next, jumper"
         :total="total"
         background
+        @size-change="handleSizeChange"
         @current-change="handleCurrentChange"
       />
     </div>
 
     <!--新增-->
-    <el-dialog :append-to-body="true" :visible.sync="dialog" :title="isAdd ? '发布新标' : '修改新标'" width="50%">
+    <el-dialog :append-to-body="true" :visible.sync="dialog" :title="isAdd ? '投标' : '修标'" width="50%">
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
       <el-form-item label="报价方式">
-            <el-radio v-model="form.priceQuotes" :label="1">总价</el-radio>
-            <el-radio v-model="form.priceQuotes" :label="2">单价</el-radio>
+            <!-- <el-radio v-model="form.priceQuotes" disabled :label="1">总价</el-radio>
+            <el-radio v-model="form.priceQuotes" disabled :label="2">单价</el-radio> -->
+            <el-tag v-if="form.priceQuotes == 1">总价</el-tag>
+            <el-tag v-if="form.priceQuotes == 2">单价</el-tag>
         </el-form-item>
-        <el-form-item label="报价" prop="dictCode">
+        <el-form-item label="报价" prop="price">
           <el-input v-model="form.price" style="width: 170px;" placeholder="请输入金额" ><template slot="append">元</template></el-input>
+           <!-- <el-input class="input-width" v-model="form.price" @keyup.native="validateNumberInput($event,'price')" @blur="blurNumberInput($event,'price')"></el-input> -->
         </el-form-item>
          <el-form-item label="备注" prop="remarks" >
           <el-input
@@ -96,7 +96,7 @@
             v-model="form.remarks">
           </el-input>
         </el-form-item>
-        <el-form-item label="附件" prop="description">
+        <el-form-item label="附件" required="true" prop="appendix">
           <el-upload
             class="upload-demo"
             drag
@@ -106,7 +106,7 @@
             :on-remove="handleRemove"
             :before-remove="beforeRemove"
             :on-exceed="handleExceed"
-            action="/tender/upload"
+            action="/bidding/upload"
             list-type="text"
             :file-list="fileList"
             multiple>
@@ -123,39 +123,76 @@
       </div>
     </el-dialog>
 
-  <!-- 详情 -->
+
+ <!-- 详情 -->
   <el-dialog :append-to-body="true" :visible.sync="viewDialog" title="投标详情" width="90%" center>
-     <el-table v-loading="loading" center :data="data" border style="width: 100%;">
+     <el-table  center :data="Paramdata" border style="width: 100%;">
 
-      <el-table-column prop="dictName" label="客户名称" />
+      <el-table-column prop="customerName" label="客户名称" align="center"/>
 
       <el-table-column label="报价方式"  align="center">
         <template slot-scope="scope">
-          <span>{{scope.row.gwStatus}}</span>
+           <el-tag  color="#5783E6" style="border-color:#5783E6" effect="dark" v-if="scope.row.priceQuotes == 1">总价</el-tag>
+            <el-tag effect="dark" color="#82C497" style="border-color:#82C497" v-if="scope.row.priceQuotes == 2">单价</el-tag>
+        </template>
+      </el-table-column>
+
+      <el-table-column prop="price" :show-overflow-tooltip="true" label="报价金额" align="center" />
+      <el-table-column prop="remarks" label="备注" :show-overflow-tooltip="true" align="center" />
+      <el-table-column prop="appendix" label="附件" align="center" width="100" >
+        <template slot-scope="scope">
+            <!-- <el-link type="primary" :href="scope.row.appendix">查看</el-link> -->
+            <el-button type="text" @click="onLoad(scope.row.appendix)">下载</el-button>
+        </template>
+      </el-table-column>
+      <el-table-column prop="createTime" label="投极时间" align="center"/>
+      <el-table-column prop="userName" label=" 投标帐号" align="center"/>
+      <el-table-column prop="status" label=" 投标结果" align="center" >
+         <template slot-scope="scope">
+          <span v-if="scope.row.status == 0">已提交</span>
+          <span v-if="scope.row.status == 1">中标</span>
+          <span v-if="scope.row.status == 2">未中标</span>
         </template>
       </el-table-column>
 
-      <el-table-column prop="description" :show-overflow-tooltip="true" label="报价金额" />
-      <el-table-column prop="remark" label="备注" />
-      <el-table-column prop="remark" label="附件" />
-      <el-table-column prop="createTime" label="投极时间" />
-      <el-table-column prop="createTime" label=" 投标帐号" />
-      <el-table-column prop="createTime" label=" 投标结果" />
     </el-table>
+     <div class="pagination">
+      <el-pagination
+        :current-page.sync="param.page"
+        :page-size="param.size"
+        layout="total, sizes, prev, pager, next, jumper"
+        :total="total1"
+        :page-sizes="[10, 20, 30, 50]"
+        background
+        @size-change="handleSizeChangeParam"
+        @current-change="handleCurrentChangeParam"
+      />
+    </div>
       <div slot="footer" class="dialog-footer">
         <el-button  @click="viewDialog = false">取消</el-button>
-        <el-button :loading="loading" type="primary" @click="doSubmit">确认</el-button>
+        <el-button :loading="loading" type="primary" @click="viewDialog = false">确认</el-button>
       </div>
   </el-dialog>
+
   </div>
 
 </template>
 
 <script>
-import { getTableList, } from '@/api/tender'
+import { getTableList,getQueryAdd,getQueryEdit,getQueryId } from '@/api/tender'
 
 export default {
   data() {
+   const checkTel = (rule, value, callback)=>{
+     console.log(rule)
+     console.log(value)
+     console.log(callback)
+     if(value == null){
+       callback(new Error("请选择附件"))
+     }else {
+        callback()
+      }
+    }
     return {
       form: {
       },
@@ -171,11 +208,12 @@ export default {
         dictName: [
           { required: true, message: '字典名称不为空', trigger: 'blur' }
         ],
-        dictCode: [
-          { required: true, message: '字典编码不为空', trigger: 'blur' }
+        price: [
+          { required: true, message: '报价金额不为空', trigger: 'blur' }
         ],
-        description: [
-          { required: true, message: '描述不为空', trigger: 'blur' }
+        appendix: [
+          // { type:"array",required: true, message: '附件不为空', trigger: 'blur' },
+           { validator: checkTel, trigger: 'blur' }
         ]
       },
       queryTypeOptions: [
@@ -185,23 +223,44 @@ export default {
       query: {
         type: '',
         value: ''
-      }
+      },
+      fileList:[],
+       param:{
+        page:1,
+        size:10
+      },
+      total1:0,
+      Paramdata:[]
     }
   },
   created() {
     this.getDictData()
   },
   methods: {
+    validateNumberInput(e,item) {
+        let value = e.target.value.replace(/[^\d.]/g,'').replace(/\.{2,}/g,'.').replace('.','$#$').replace(/\./g,'').replace('$#$','.').replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3');
+        if(value >= 999999999.99) {
+          this.priceListForm[item] = 999999999.99;
+        }else {
+          this.priceListForm[item] = value;
+        }
+ 	},
+	blurNumberInput(e,item) {
+    	if(e.target.value && e.target.value.indexOf('.') <= 0) {
+         	this.priceListForm[item] = e.target.value + '.00'
+      	}
+ 	},
     // 发布时间
     oncustom(){
 
     },
-    // 获取字典详情
+    // 获取详情
     getDictData: function() {
       this.loading = true
       const params = {
          page:this.currentPage,
-         size:this.pageSize
+         size:this.pageSize,
+         title:this.query.title
       }
       getTableList(params).then(res => {
         console.log(res)
@@ -211,13 +270,54 @@ export default {
       })
     },
 
+      // 搜索
+      handleFind: function() {
+        this.currentPage = 1
+      this.getDictData()
+    },
+
+     // 文件移除的时候
+     handleRemove(file, fileList) {
+        this.form.appendix = ""
+        console.log(file, fileList,this.fileList,"移出");
+      },
+      // 文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用
+      handleChange(file,fileList){
+        console.log(file,fileList,"上传")
+        if(file.response){
+          console.log(file.response,"file")
+          this.form.appendix=file.response.data
+        }
+      },
+      // 点击文件列表中已上传的文件时的钩子
+      handlePreview(file) {
+        console.log(file,"file1");
+        window.location.href = file.url
+      },
+      handleExceed(files, fileList) {
+        this.$message.warning(`当前限制选择 1 个附件,本次选择了 ${files.length} 个文件`);
+      },
+      beforeRemove(file, fileList) {
+        return this.$confirm(`确定移除 ${ file.name }?`);
+      },
+        // 下载
+    onLoad(row){
+        // const params = new URLSearchParams()
+      // params.append('path', row)
+      let a =document.createElement('a')
+      // a.href= /bidding/load
+      let url = window.location.origin + "/bidding/load?path=" + encodeURIComponent(row)
+       a.href = url
+       a.click()
+    },
+
     // 字典名称提交动作
     doSubmit() {
       this.$refs['form'].validate((valid) => {
         if (valid) {
           if (this.isAdd) {
             // 新增字典
-            saveDict(this.form).then((res) => {
+            getQueryAdd(this.form).then((res) => {
               if (res.data.code === 200) {
                 this.$message({ message: '操作成功', type: 'success' })
               } else {
@@ -229,7 +329,7 @@ export default {
             })
           } else {
             // 更新字典
-            updateDict(this.form).then((res) => {
+            getQueryEdit(this.form).then((res) => {
               if (res.data.code === 200) {
                 this.$message({ message: '操作成功', type: 'success' })
               } else {
@@ -243,22 +343,61 @@ export default {
       })
     },
     // 添加字典
-    handleAdd: function() {
+    handleAdd: function(row) {
       this.dialog = true
       this.isAdd = true
       this.form = {}
+      this.fileList = []
+      this.form.tenderId = row.id
+      this.form.priceQuotes = row.priceQuotes
+      if(this.$refs['form']){
+        this.$refs["form"].resetFields();
+      }
     },
     // 编辑字典
     handleEdit: function(row) {
+      if(this.$refs['form']){
+        this.$refs["form"].resetFields();
+      }
       this.dialog = true
       this.isAdd = false
-      this.form = row
+      this.form = row.bidding
+      this.form.priceQuotes =row.priceQuotes
+      let name = this.form.appendix.split("\\") ;
+      name = name.pop()
+      // let name = data.appendix.replace(/(.*\/)*([^.]+).*/ig, "$2");
+      this.fileList = [{name:name,url: this.form.appendix}]
+    },
+     handleView(row){
+      this.param.tenderId = row.id
+      this.getParam()
+      this.viewDialog =true
+    },
+    getParam(){
+      let data = this.param
+      getQueryId(data).then((res)=>{
+        console.log(res.data.data.records,"")
+        this.Paramdata = res.data.data.records
+        this.total1 = res.data.data.total
+      })
     },
 
     // 换页
     handleCurrentChange: function(val) {
       this.currentPage = val
       this.getDictData()
+    },
+    handleSizeChange(val){
+      this.pageSize = val
+      this.getDictData()
+    },
+       handleCurrentChangeParam(val){
+      this.param.page = val
+      this.getParam()
+    },
+    handleSizeChangeParam(val){
+      this.param.size = val
+      this.getParam()
     }
   }
 }