Commit 397a0c95 authored by danfuman's avatar danfuman

Merge branch 'master' of http://192.168.60.201/root/dsk-operate-sys

# Conflicts:
#	dsk-operate-ui/vue.config.js
parents 1b53ff94 0401c8f0
# 页面标题
VUE_APP_TITLE = 数字化经营履约全生命链路管理系统
NODE_ENV = "production"
# 生产环境配置
ENV = 'test'
# 数字化经营履约全生命链路管理系统/生产环境
VUE_APP_BASE_API = '/prod-api'
\ No newline at end of file
......@@ -7,6 +7,7 @@
"scripts": {
"dev": "vue-cli-service serve",
"build:prod": "vue-cli-service build",
"build:test": "vue-cli-service build --mode test",
"build:stage": "vue-cli-service build --mode staging",
"preview": "node build/index.js --preview",
"lint": "eslint --ext .js,.vue src"
......
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="14" height="14" viewBox="0 0 14 14"><defs><clipPath id="master_svg0_1539_143591"><rect x="0" y="0" width="14" height="14" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_1539_143591)"><g><path d="M7.00035,1.508544921875C7.00035,1.508544921875,10.05856,4.566754921875,10.05856,4.566754921875C10.05856,4.566754921875,9.233609999999999,5.391704921875,9.233609999999999,5.391704921875C9.233609999999999,5.391704921875,7.584,3.742104921875,7.584,3.742104921875C7.584,3.742104921875,7.584,9.666634921875,7.584,9.666634921875C7.584,9.666634921875,6.41734,9.666634921875,6.41734,9.666634921875C6.41734,9.666634921875,6.41734,3.741484921875,6.41734,3.741484921875C6.41734,3.741484921875,4.76709,5.391704921875,4.76709,5.391704921875C4.76709,5.391704921875,3.94214,4.566754921875,3.94214,4.566754921875C3.94214,4.566754921875,7.00035,1.508544921875,7.00035,1.508544921875C7.00035,1.508544921875,7.00035,1.508544921875,7.00035,1.508544921875ZM2.91667,11.375164921875C2.91667,11.375164921875,2.91667,10.208494921875,2.91667,10.208494921875C2.91667,10.208494921875,1.75,10.208494921875,1.75,10.208494921875C1.75,10.208494921875,1.75,12.541844921875,1.75,12.541844921875C1.75,12.541844921875,12.25,12.541844921875,12.25,12.541844921875C12.25,12.541844921875,12.25,10.208494921875,12.25,10.208494921875C12.25,10.208494921875,11.08333,10.208494921875,11.08333,10.208494921875C11.08333,10.208494921875,11.08333,11.375164921875,11.08333,11.375164921875C11.08333,11.375164921875,2.91667,11.375164921875,2.91667,11.375164921875C2.91667,11.375164921875,2.91667,11.375164921875,2.91667,11.375164921875Z" fill-rule="evenodd" fill="#232323" fill-opacity="1"/></g></g></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill="none" version="1.1" width="14" height="14" viewBox="0 0 14 14"><defs><clipPath id="master_svg0_1582_133303"><rect x="0" y="0" width="14" height="14" rx="0"/></clipPath></defs><g clip-path="url(#master_svg0_1582_133303)"><g><path d="M2.5419921875,2.541748046875L9.0419921875,2.541748046875L9.0419921875,1.541748046875L1.5419921875,1.541748046875L1.5419921875,12.458448046875L9.0419921875,12.458448046875L9.0419921875,11.458418046875L2.5419921875,11.458418046875L2.5419921875,2.541748046875ZM12.5419921875,7.500078046875L12.5419921875,6.500078046875L5.5419921875,6.500078046875L5.5419921875,7.500078046875L12.5419921875,7.500078046875Z" fill-rule="evenodd" fill="#0081FF" fill-opacity="1"/></g><g><path d="M6.20757528125,7.0001821875L8.49947828125,4.7080261875L7.7923282812500005,4.0009581875L4.79340128125,7.0002221875L7.7926382812499995,9.9994621875L8.49974828125,9.2923521875L6.20757528125,7.0001821875Z" fill-rule="evenodd" fill="#0081FF" fill-opacity="1"/></g></g></svg>
\ No newline at end of file
......@@ -10,13 +10,22 @@
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.3s;
transition: opacity 0.3s ease-in;
}
.fade-enter,
.fade-leave-to /* .fade-leave-active below version 2.1.8 */ {
opacity: 0;
}
.fade-position-enter-active,
.fade-position-leave-active {
transition: all 0.3s ease-in;
}
.fade-position-enter,
.fade-position-leave-to /* .fade-leave-active below version 2.1.8 */ {
opacity: 0;
}
.el-message {
z-index: 3000 !important;
}
......@@ -3,7 +3,7 @@
/* fade */
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.28s;
transition: opacity 0.3s;
}
.fade-enter,
......
......@@ -181,7 +181,7 @@ export const constantRoutes = [
children: [
{
path: '/company/:id',
component: () => import('@/views/detail/party-b/index'),
component: () => import('@/views/detail'),
name: 'Company',
meta: { title: '企业详情' }
}
......
......@@ -23,18 +23,20 @@
<!-- 未点击前的输入框样式 -->
<div class="normal-search-container" :class="{'is-hover-search' : form.hover}" @mouseover="searchHover($event,form)"
@mouseleave="searchUnHover($event,form)">
<img src="@/assets/images/enterprise/enterprise-search-icon.svg" alt="">
<span v-show="!form.hover && !form.value">搜索</span>
<el-input v-model="form.value" :placeholder="form.placeholder ? form.placeholder : '输入关键词查询'"
:style="form.width?'width:'+form.width+'px':'width:238px'" @focus="searchFocus($event,form)" @blur="searchBlur($event,form)"
@input="value => searchInput(value,form)" v-show="form.hover || form.value" @keydown.native.enter="changeSelect">
<template slot="suffix">
<transition mode="out-in" appear name="fade">
<img src="@/assets/images/enterprise/search-input-clear-icon.svg" alt="" @click.stop="form.value = '';changeSelect()"
v-show="form.showClearIcon">
</transition>
</template>
</el-input>
<img src="@/assets/images/enterprise/enterprise-search-icon.svg">
<transition name="fade-position" appear mode="out-in">
<span v-if="!form.hover && !form.value">搜索</span>
<el-input v-model="form.value" :placeholder="form.placeholder ? form.placeholder : '输入关键词查询'"
:style="form.width?'width:'+form.width+'px':'width:238px'" @focus="searchFocus($event,form)" @blur="searchBlur($event,form)"
@input="value => searchInput(value,form)" v-else @keydown.native.enter="changeSelect">
<template slot="suffix">
<transition mode="out-in" appear name="fade">
<img src="@/assets/images/enterprise/search-input-clear-icon.svg" @click.stop="form.value = '';changeSelect()"
v-show="form.showClearIcon">
</transition>
</template>
</el-input>
</transition>
</div>
</template>
<!-- 多选 -->
......@@ -145,11 +147,19 @@ export default {
}
},
searchBlur(event, formData) {
const { target } = event;
// 失去焦点没有文字
if (!target?.value?.length) {
this.$set(formData, "hover", false);
}
this.$set(formData, "showClearIcon", false);
this.changeSelect();
},
searchInput(value, formData) {
if (value?.length) {
this.$set(formData, "showClearIcon", true);
} else {
this.$set(formData, "showClearIcon", false);
}
},
searchHover(event, formData) {
......@@ -157,6 +167,7 @@ export default {
},
searchUnHover(event, formData) {
if (!formData.value) {
this.$set(formData, "showClearIcon", false);
this.$set(formData, "hover", false);
}
},
......@@ -429,6 +440,13 @@ export default {
::v-deep .normal-search-container {
display: flex;
align-items: center;
transition-property: width, background;
transition-duration: 0.3s;
width: 64px;
height: 32px;
padding-left: 12px;
box-sizing: border-box;
position: relative;
&.is-hover-search {
width: 238px;
......@@ -440,19 +458,13 @@ export default {
}
}
&:hover {
& > span {
color: #0081ff;
}
}
& > img {
width: 16px;
height: 16px;
margin-left: 12px;
cursor: pointer;
}
// & > .search-transition-container > span {
& > span {
color: rgba(35, 35, 35, 0.8);
font-weight: 400;
......@@ -462,7 +474,12 @@ export default {
cursor: pointer;
}
.search-transition-container {
width: 100%;
}
.el-input {
width: 100% !important;
& > .el-input__inner {
border: none;
height: 32px;
......@@ -470,7 +487,7 @@ export default {
caret-color: #0081ff;
color: rgba(35, 35, 35, 0.8);
font-size: 14px;
background: #f4f6f9;
background: transparent;
padding-right: 26px;
padding-left: 8px;
......@@ -488,6 +505,9 @@ export default {
.el-input__suffix-inner {
height: 14px;
width: 14px;
display: flex;
align-items: center;
justify-content: center;
}
img {
......
......@@ -3,7 +3,7 @@
<!-- 导入弹窗 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px">
<el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" :action="upload.url" :disabled="upload.isUploading"
:on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
:on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" on-error="handleFileError" :auto-upload="false" drag>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip">
......@@ -13,7 +13,7 @@
</el-upload>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitFileForm">确 定</el-button>
<el-button @click="upload.open = false">取 消</el-button>
<el-button @click="cancelimport">取 消</el-button>
</div>
</el-dialog>
<!--导入结果-->
......@@ -99,13 +99,16 @@ export default {
if (response.data) {
this.uploadResult.successCount = response.data.sucessCount;
this.uploadResult.errorCount = response.data.errorCount;
response.data.errorMsg ? this.uploadResult.errorMsg = response.data.errorMsg : null;
this.upload.showResult = true;
(response.data?.errorMsg && response.data?.errorMsg?.length) ? ((this.uploadResult.errorMsg = response.data.errorMsg) && (this.upload.showResult = true)) : null;
}
this.$emit("success-upload");
} else {
this.$message.error(`上传失败,${response.msg ? response.msg : "请根据模板正确填写表格内容!"}`);
}
},
handleFileError(err, file, fileList) {
this.$message.error(`上传失败,${response.msg ? response.msg : "请根据模板正确填写表格内容!"}`);
},
// 提交上传文件
submitFileForm() {
this.$refs.upload.submit();
......@@ -123,6 +126,9 @@ export default {
this.upload.showResult = false;
this.uploadResult = this.$options.data.call(this).uploadResult;
},
cancelimport() {
this.$emit("cancel-import");
}
},
}
</script>
......
......@@ -4,19 +4,19 @@
<!-- 查询功能 -->
<div class="search-form-container">
<div class="left-form-title">开标记录</div>
<div class="right-form-btn-box">
<div class="right-form-btn-box" v-if="!notHasPermission">
<div class="search-btn add" @click.stop="addBidOpeningRecord">
<img src="@/assets/images/project/project-bid-opening-record-add.svg" alt="">
<span>新增</span>
</div>
<div class="search-btn remove" @click.stop="batchDeletion()">
<img src="@/assets/images/project/project-bid-opening-record-remove.svg" alt="">
<span>批量删除</span>
</div>
<div class="search-btn import" @click.stop="batchImport">
<img src="@/assets/images/project/project-bid-opening-record-import.svg" alt="">
<span>批量导入</span>
</div>
<div class="search-btn remove" @click.stop="batchDeletion()">
<img src="@/assets/images/project/project-bid-opening-record-remove.svg" alt="">
<span>批量删除</span>
</div>
</div>
</div>
<!-- 骨架屏 -->
......@@ -55,7 +55,7 @@
:formRules="formRules" :formData="formData"></add-bid-opening-record>
<!-- 导入弹窗 -->
<batch-import-com :uploadOptions="uploadOptions"></batch-import-com>
<batch-import-com :uploadOptions="uploadOptions" @success-upload="successUpload" @cancel-import="cancelimport"></batch-import-com>
</div>
</template>
<script>
......@@ -68,6 +68,32 @@ import { getToken } from "@/utils/auth";
export default {
components: { skeleton, TableListCom, AddBidOpeningRecord, BatchImportCom },
name: "bidOpeningRecord",
props: {
detailId: {
type: Number,
default: 0
},
projectData: {
type: Object,
default: () => ({})
},
isDisabled: {
type: Boolean,
default: false
}
},
watch: {
projectData: {
handler(newValue, oldValue) {
this.projectDetail = newValue;
}
},
isDisabled: {
handler(newValue, oldValue) {
this.notHasPermission = newValue;
}
}
},
data() {
// 必填字符串长度验证
function tendererStrLengthValidator(target) {
......@@ -118,6 +144,10 @@ export default {
return callback();
}
return {
// 项目详情
projectDetail: this.projectData,
// 是否拥有权限
notHasPermission: this.isDisabled,
title: "新增开标记录",
// 加载状态
isLoadingData: false,
......@@ -128,7 +158,6 @@ export default {
{ label: '项目经理', prop: 'businessManager', minWidth: "115px" },
{ label: '联系方式', prop: 'contact', width: "133px", },
{ label: '投标金额(万元)', prop: 'tenderAmount', width: "168px", slot: true, slotHeader: true, slotName: "tenderAmountHeader" },
{ label: '操作', prop: 'action-field-bar', width: "151px", fixed: "right" },
],
needSelection: {
flag: true,
......@@ -140,14 +169,14 @@ export default {
pageSize: 20,
orderByColumn: "tenderAmount",
isAsc: "asc",
businessId: this.$route.query.id,
businessId: this.detailId ? this.detailId : parseInt(this.$route.query.id),
},
tableDataTotal: 0,
tableDataList: [],
// 表单验证规则
// 表单数据
formData: {
businessId: this.$route.query.id,
businessId: this.detailId ? this.detailId : parseInt(this.$route.query.id),
tenderer: "",
tendererNature: "",
businessManager: "",
......@@ -169,13 +198,13 @@ export default {
// 是否显示弹出层
open: false,
// 弹出层标题
title: "导入开标信息",
title: "导入开标记录",
// 是否禁用上传
isUploading: false,
// 设置上传的请求头部
headers: { Authorization: "Bearer " + getToken() },
// 上传的地址
url: process.env.VUE_APP_BASE_API + `/business/open/tender/importData/${this.$route.query.id}`,
url: process.env.VUE_APP_BASE_API + `${process.env.NODE_ENV == "production" ? "business/open/tender/importData/" : "/business/open/tender/importData/"}${this.detailId ? this.detailId : parseInt(this.$route.query.id)}`,
// 展示上传结果
showResult: false,
// 模板下载地址
......@@ -197,6 +226,14 @@ export default {
methods: {
async dataInit() {
try {
if (!this.notHasPermission) {
this.formColum.push({ label: '操作', prop: 'action-field-bar', width: "151px", fixed: "right" });
} else {
this.needSelection = {
flag: false,
width: "39px",
};
}
await this.getTableList();
} catch (error) {
console.log(error);
......@@ -269,6 +306,8 @@ export default {
this.$message.success(`${this.formData.id ? "修改成功!" : "新增成功!"}`);
this.dialogClose();
await this.getTableList();
} else {
this.$message.error(`${result.msg}`);
}
} catch (error) {
console.log(error);
......@@ -279,7 +318,7 @@ export default {
try {
await this.$nextTick();
// 清空复选框选项
this.$refs["tableListComParent"].$refs["tableRef"].clearSelection();
this.$refs["tableListComParent"]?.$refs["tableRef"] ? this.$refs["tableListComParent"].$refs["tableRef"].clearSelection() : null;
this.selectionArray = [];
} catch (error) {
console.log(error);
......@@ -338,7 +377,8 @@ export default {
cancelimport() {
this.uploadOptions.open = false;
},
getdatas() {
// 导入成功
successUpload() {
this.getTableList();
}
},
......@@ -417,14 +457,14 @@ export default {
background: #fff;
border: 1px solid #ff3c3c;
color: #ff3c3c;
border-radius: 2px;
border-radius: 4px;
}
&.import {
background: #fff;
border: 1px solid #d9d9d9;
color: #232323;
border-radius: 2px;
border: 1px solid #0081ff;
color: #0081ff;
border-radius: 4px;
}
}
}
......
......@@ -15,7 +15,8 @@
<div class="titles">
<img src="@/assets/images/project/headimg.png" class="headimg">
<strong class="text">{{ProjectData.projectName}}</strong>
<div class="protypes" :class="{'i1':ProjectData.status == 0,'i2':ProjectData.status == 1,'i3':ProjectData.status == 2}"
<div class="protypes"
:class="{'i1':ProjectData.status == 0,'i2':ProjectData.status == 1,'i3':ProjectData.status == 2,'i4':ProjectData.status == 3}"
v-if="isDisabled == false">
<span v-for="(item,index) in projectStatus"><i v-if="ProjectData.status == item.dictValue">{{item.dictLabel}}</i></span>
<el-select class="sels" v-model="ProjectData.status" @change="editXMSL({status:ProjectData.status})">
......@@ -122,7 +123,8 @@
<!--联系人-->
<lxr v-if="thistag == 'lxr'" :isDisabled='isDisabled' :detailId="detailId" listtype="project"></lxr>
<!-- 开标记录 -->
<bid-opening-record v-if="thistag == 'bidOpeningRecord'"></bid-opening-record>
<bid-opening-record v-if="thistag == 'bidOpeningRecord'" :isDisabled='isDisabled' :detailId="detailId"
:projectData="ProjectData"></bid-opening-record>
<!--跟进记录-->
<gjjl v-if="thistag == 'gjjl'" :isDisabled='isDisabled' types="gjjl" :detailId="detailId"></gjjl>
<!--工作待办-->
......@@ -484,6 +486,13 @@ export default {
background: #cbe5ff;
}
}
&.i4 {
background: #f3f4f5;
color: #999999;
&:hover {
background: #d9d9d9;
}
}
> span {
width: 100%;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment