Commit d96a96bf authored by tianhongyang's avatar tianhongyang

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

parents 12daede2 0134508f
......@@ -168,6 +168,7 @@ tenant:
- business_follow_record
- business_label
- business_relate_company
- business_open_tender
# MyBatisPlus配置
......
......@@ -32,17 +32,22 @@ public class PasswordUtils {
// 至少包含一个大写字母
password.append(UPPER_CASE.charAt(random.nextInt(UPPER_CASE.length())));
// 至少包含一个数字
password.append(NUMBERS.charAt(random.nextInt(NUMBERS.length())));
// 生成剩余部分的密码
for (int i = 0; i < length - 3; i++) {
String characters = LOWER_CASE + UPPER_CASE + NUMBERS;
password.append(characters.charAt(random.nextInt(characters.length())));
for (int i = 0; i < length - 2; i++) {
// 至少包含一个数字
password.append(NUMBERS.charAt(random.nextInt(NUMBERS.length())));
// String characters = LOWER_CASE + UPPER_CASE + NUMBERS;
// password.append(characters.charAt(random.nextInt(characters.length())));
}
// 打乱密码中字符的顺序
return shufflePassword(password.toString());
// return shufflePassword(password.toString());
return password.toString();
}
public static void main(String[] args) {
System.out.println(PasswordUtils.generatePwd(8));
}
public static String shufflePassword(String password) {
......
package com.dsk.biz.controller;
import com.dsk.biz.domain.BusinessOpenTender;
import com.dsk.biz.domain.bo.BusinessOpenTenderDto;
import com.dsk.biz.service.IBusinessOpenTenderService;
import com.dsk.biz.utils.ExcelUtils;
import com.dsk.common.annotation.Log;
import com.dsk.common.annotation.RepeatSubmit;
import com.dsk.common.core.controller.BaseController;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.domain.R;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.enums.BusinessType;
import com.dsk.common.exception.BusinessException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 项目开标记录
*
* @author lcl
* @date 2023-10-23
*/
@RestController
@RequestMapping("/business/open/tender")
public class BusinessOpenTenderController extends BaseController {
@Autowired
private IBusinessOpenTenderService baseService;
/**
* 开标记录列表
*/
@GetMapping("/list")
public TableDataInfo<BusinessOpenTender> list(BusinessOpenTenderDto dto, PageQuery pageQuery) {
return baseService.selectList(dto, pageQuery);
}
/**
* 添加开标记录
*/
@PostMapping
@RepeatSubmit
public R<Void> add(@RequestBody BusinessOpenTender bo) {
return toAjax(baseService.add(bo));
}
/**
* 修改开标记录
*/
@PutMapping
@RepeatSubmit
public R<Void> edit(@RequestBody BusinessOpenTender bo) {
return toAjax(baseService.edit(bo));
}
/**
* 删除开标记录
*/
@DeleteMapping("/{ids}")
@RepeatSubmit
public R<Void> remove(@PathVariable Long[] ids) {
return toAjax(baseService.remove(ids));
}
/**
* 批量导入
*/
@Log(title = "开标记录批量导入", businessType = BusinessType.IMPORT)
@PostMapping("/importData/{businessId}")
public R<Map<String, Object>> importData(@RequestPart("file") MultipartFile file, @PathVariable Integer businessId) throws Exception {
List<BusinessOpenTender> list = new ExcelUtils<>(BusinessOpenTender.class).importExcel(file.getInputStream(), 1);
if (list.isEmpty()) throw new BusinessException("请填写导入数据!");
int sucessCount = 0;
List<String> errorList = new ArrayList<>();
for (BusinessOpenTender openTender : list) {
if (ObjectUtils.isEmpty(openTender.getTenderer())) {
errorList.add("投标人不能为空!");
continue;
}
openTender.setBusinessId(businessId);
try {
int add = baseService.add(openTender);
if (add > 0) {
sucessCount++;
}
} catch (Exception e) {
errorList.add(openTender.getTenderer().concat(":").concat(e.getMessage()));
}
}
Map<String, Object> result = new HashMap<>();
result.put("sucessCount", sucessCount);
result.put("errorCount", list.size() - sucessCount);
result.put("errorMsg", errorList);
return R.ok(result);
}
}
package com.dsk.biz.domain;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.dsk.common.annotation.Excel;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* @Author lcl
* @Data 2023/10/23 16:26
*/
@Data
public class BusinessOpenTender implements Serializable {
@TableId(value = "id",type = IdType.ASSIGN_ID)
private Long id;
/**
* 项目id
*/
private Integer businessId;
/**
* 投标人id
*/
private Integer tendererId;
/**
* 投标人
*/
@Excel(name = "投标人")
private String tenderer;
/**
* 企业性质
*/
@Excel(name = "企业性质")
private String tendererNature;
/**
* 项目经理
*/
@Excel(name = "项目经理")
private String businessManager;
/**
* 联系方式
*/
@Excel(name = "联系方式")
private String contact;
/**
* 投标金额
*/
@Excel(name = "投标金额(万元)")
private Double tenderAmount;
private Date createTime;
private Date updateTime;
}
package com.dsk.biz.domain.bo;
import com.dsk.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author lcl
* @create 2023/8/14
*/
@Data
@NoArgsConstructor
public class BusinessOpenTenderDto implements Serializable {
/**
* 项目id
*/
private Integer businessId;
}
package com.dsk.biz.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dsk.biz.domain.BusinessOpenTender;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface BusinessOpenTenderMapper extends BaseMapper<BusinessOpenTender> {
}
package com.dsk.biz.service;
import com.dsk.biz.domain.BusinessOpenTender;
import com.dsk.biz.domain.bo.BusinessOpenTenderDto;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.page.TableDataInfo;
public interface IBusinessOpenTenderService {
TableDataInfo<BusinessOpenTender> selectList(BusinessOpenTenderDto dto, PageQuery pageQuery);
int add(BusinessOpenTender bo);
int edit(BusinessOpenTender bo);
int remove(Long[] ids);
}
package com.dsk.biz.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.dsk.biz.domain.BusinessOpenTender;
import com.dsk.biz.domain.bo.BusinessOpenTenderDto;
import com.dsk.biz.mapper.BusinessOpenTenderMapper;
import com.dsk.biz.service.IBusinessOpenTenderService;
import com.dsk.common.core.domain.PageQuery;
import com.dsk.common.core.page.TableDataInfo;
import com.dsk.common.exception.ServiceException;
import jodd.bean.BeanException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import javax.annotation.Resource;
import java.util.Arrays;
/**
* @Author lcl
* @Data 2023/10/23 16:29
*/
@Slf4j
@Service
public class BusinessOpenTenderServiceImpl implements IBusinessOpenTenderService {
@Resource
private BusinessOpenTenderMapper baseMapper;
@Override
public TableDataInfo<BusinessOpenTender> selectList(BusinessOpenTenderDto dto, PageQuery pageQuery) {
return TableDataInfo.build(baseMapper.selectPage(pageQuery.build(),
Wrappers.<BusinessOpenTender>lambdaQuery().eq(BusinessOpenTender::getBusinessId, dto.getBusinessId())));
}
@Override
public int add(BusinessOpenTender bo) {
verifyBean(bo);
BusinessOpenTender openTender = baseMapper.selectOne(Wrappers.<BusinessOpenTender>lambdaQuery()
.eq(BusinessOpenTender::getTenderer, bo.getTenderer())
.eq(BusinessOpenTender::getBusinessId,bo.getBusinessId()));
if(!ObjectUtils.isEmpty(openTender)) throw new ServiceException("当前投标人已存在");
return baseMapper.insert(bo);
}
@Override
public int edit(BusinessOpenTender bo) {
if(ObjectUtils.isArray(bo.getId())) throw new BeanException("id不能为空!");
verifyBean(bo);
BusinessOpenTender openTender = baseMapper.selectOne(Wrappers.<BusinessOpenTender>lambdaQuery()
.eq(BusinessOpenTender::getTenderer, bo.getTenderer())
.eq(BusinessOpenTender::getBusinessId,bo.getBusinessId()));
if(!ObjectUtils.isEmpty(openTender) && !openTender.getId().equals(bo.getId())) throw new ServiceException("当前投标人已存在");
return baseMapper.updateById(bo);
}
@Override
public int remove(Long[] ids) {
return baseMapper.deleteBatchIds(Arrays.asList(ids));
}
private void verifyBean(BusinessOpenTender bo){
if(ObjectUtils.isArray(bo.getBusinessId())) throw new BeanException("项目id不能为空!");
if(ObjectUtils.isArray(bo.getTenderer())) throw new BeanException("开标人不能为空!");
if(ObjectUtils.isArray(bo.getTendererNature())) throw new BeanException("企业性质不能为空!");
if(ObjectUtils.isArray(bo.getTenderAmount())) throw new BeanException("投标金额不能为空!");
}
}
......@@ -57,7 +57,7 @@ public class EconomicServiceImpl implements EconomicService {
dto.setYear(DateUtils.getYear() - 1);
}
Map<String, Object> map = dskOpenApiUtil.requestBody("/economic/national/nationalPage", BeanUtil.beanToMap(dto, false, false));
Map<String, Object> map = dskOpenApiUtil.requestBody("/operate/economic/national/nationalPage", BeanUtil.beanToMap(dto, false, false));
Integer code = MapUtils.getInteger(map, "code", 300);
if (!code.equals(HttpStatus.OK.value())) {
throw new RuntimeException();
......
......@@ -37,6 +37,14 @@ export function getTenantPackage(param) {
params: param
})
}
//同步企业方案
export function syncTenantPackage(param) {
return request({
url: '/system/tenant/syncTenantPackage',
method: 'get',
params: param
})
}
//租户列表
export function getTenantList(param) {
......
......@@ -70,7 +70,7 @@ export const constantRoutes = [
path: 'index',
component: () => import('@/views/index'),
name: 'Index',
meta: { title: '首页', icon: 'index',noCache: false }
meta: { title: '首页', icon: 'index', noCache: true}
}
]
},
......@@ -130,20 +130,6 @@ export const constantRoutes = [
}
]
},
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/performance/gzsc/:id',
component: () => import('@/views/market/detail'),
name: 'GzscDetail',
meta: { title: '公招市场详情', icon: 'enterprise'},
}
]
},
{
path: '/groupAccount',
component: Layout,
......@@ -173,6 +159,7 @@ export const constantRoutes = [
}
]
},
//乙方-企业详情
{
path: '/company',
component: Layout,
......@@ -181,12 +168,104 @@ export const constantRoutes = [
children: [
{
path: '/company/:id',
component: () => import('@/views/detail/party-b/index'),
component: () => import('@/views/detail'),
name: 'Company',
meta: { title: '企业详情' }
}
]
},
//企业详情-业绩
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/company/:id/performance',
component: () => import('@/views/detail'),
}
]
},
//企业详情-人员
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/company/:id/personnel',
component: () => import('@/views/detail'),
}
]
},
//企业详情-经营信息
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/company/:id/business',
component: () => import('@/views/detail'),
}
]
},
//企业详情-良好行为
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/company/:id/behavior',
component: () => import('@/views/detail'),
}
]
},
//企业详情-信用评价
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/company/:id/evaluation',
component: () => import('@/views/detail'),
}
]
},
//企业详情-信用行为
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/company/:id/credit',
component: () => import('@/views/detail'),
}
]
},
//企业详情-股权
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/company/:id/lt',
component: () => import('@/views/detail'),
}
]
},
//人员详情
{
path: '/personnel',
component: Layout,
......@@ -194,13 +273,249 @@ export const constantRoutes = [
redirect: 'noredirect',
children: [
{
path: '/personnel/:id',
component: () => import('@/views/detail/party-b/index'),
path: '/personnel/:id.html',
component: () => import('@/views/detail'),
name: 'Personnel',
meta: { title: '人员详情' }
}
]
},
//公招市场详情
{
path: '/gzsc',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/gzsc/:id',
component: () => import('@/views/detail'),
name: 'detail-gzsc',
}
]
},
//中标业绩详情
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/performance/zb/:id.html',
component: () => import('@/views/detail'),
}
]
},
//荣誉详情
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/honor/:id.html',
component: () => import('@/views/detail'),
}
]
},
//标讯Pro-招标公告
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/bxpro/:id.html',
component: () => import('@/views/detail'),
}
]
},
//中标候选人
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/zbpro/:id.html',
component: () => import('@/views/detail'),
}
]
},
//开标记录
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/biz/tbjl/:id.html',
component: () => import('@/views/detail'),
}
]
},
//一体化详情
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/performance/sjyth/:id.html',
component: () => import('@/views/detail'),
}
]
},
//一体化详情
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/performance/yth/:id.html',
component: () => import('@/views/detail'),
}
]
},
//四库详情
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/performance/sky/:id.html',
component: () => import('@/views/detail'),
}
]
},
//公路系统详情
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/performance/glxt/:id.html',
component: () => import('@/views/detail'),
}
]
},
//公路系统详情
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/performance/xmzt/:id.html',
component: () => import('@/views/detail'),
}
]
},
//水利详情
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/performance/slyj/:id.html',
component: () => import('@/views/detail'),
}
]
},
//江西住建云详情
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/performance/jxzjy/:id.html',
component: () => import('@/views/detail'),
}
]
},
//北京业绩详情
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/performance/bj/:id.html',
component: () => import('@/views/detail'),
}
]
},
//云南业绩详情
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/performance/yn/:id.html',
component: () => import('@/views/detail'),
}
]
},
//商机-标讯详情
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/biz/bx/:id.html',
component: () => import('@/views/detail'),
}
]
},
//商机-土地交易详情
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/biz/tdjy/:id.html',
component: () => import('@/views/detail'),
}
]
},
//商机-拟建项目详情
{
path: '',
component: Layout,
hidden: true,
redirect: 'noredirect',
children: [
{
path: '/biz/njxm/:id.html',
component: () => import('@/views/detail'),
}
]
},
{
path: '/structure',
component: Layout,
......@@ -362,8 +677,6 @@ export const constantRoutes = [
]
},
]
// 动态路由,基于用户权限动态去加载
......
......@@ -36,7 +36,7 @@
<el-input type="text" placeholder="请输入" v-model="queryParam.creditCode"></el-input>
</el-form-item>
<div class="popbot">
<div class="wordprimary" @click="toct">前往城投平台寻找客户线索></div>
<div class="wordprimary" style="display: inline-block" @click="toct">前往城投平台寻找客户线索></div>
<div class="btn btn_cancel h32" @click="resetForm('ruleForm')">返回</div>
<div class="btn btn_primary h32" @click="submitForm('ruleForm')">添加</div>
</div>
......@@ -84,8 +84,6 @@
created() {
this.prvinceTree()
this.getDictType()
console.log(this.dialogVisible)
console.log('1111111111')
},
computed: {},
methods:{
......@@ -116,7 +114,7 @@
cityId:'',
districtId:'',
},
this.dialogVisible = false
this.$emit("handleCancel",false)
this.showlist = false
},
getAddr(obj){
......@@ -223,7 +221,7 @@
addCustomer(this.queryParam).then(result=>{
if(result.code == 200){
this.$message.success('添加成功!')
this.dialogVisible = false
this.$emit("handleCancel",false)
this.resetForm('ruleForm')
}else{
this.$message.error(result.msg)
......@@ -234,7 +232,7 @@
});
},
toct(){
this.dialogVisible = false
this.$emit("handleCancel",false)
this.$router.push({path:'/macro/urban'})
},
//输入数字
......
......@@ -182,7 +182,7 @@
</div>
</div>
</div>
<AddCustom :data="data" v-if="data.open"></AddCustom>
<AddCustom :data="data" v-if="data.open" @handleCancel="handleCancel"></AddCustom>
</div>
</template>
......@@ -574,6 +574,9 @@
handleAdd(){
this.data.open=true
},
handleCancel(isshow){
this.data.open=isshow
},
}
}
</script>
......
<template>
<div v-loading="loading" class="market-container">
<iframe id="companyIframe" marginwidth="0" marginheight="0" frameborder="0" scrolling="no" width="100%" :style="{height:iframeHight+'px'}"
:src="src" />
</div>
</template>
<script>
import { steerScroll } from '@/assets/js/jskplug';
import { dskAccessToken } from '@/api/common';
import {encodeStr} from "@/assets/js/common.js"
import { getUipIdByCid } from '@/api/macro/macro'
export default {
name: 'Enterprise',
components: {
},
data() {
return {
encodeStr,
loading: false, // 是否加载完成-当前页控制
iframeTimer: '', // 是否加载中定时器-当前页控制
footHeight: 0, //底部高度,若为0(页面内部嵌套或者没有底部板块)
iframeHight: window.innerHeight, // iframe高度-当前页控制
navigation: { isFixed: true, fixedHeight: 56, totalHeight: 68 }, // iframe之外页面顶部对象,ifFixed:是否浮动;fixedHeight:浮动对象高度;totalHeight:顶部整体高度
src: '', //iframe嵌套页面地址
// domain: 'https://plug.jiansheku.com', // 插件地址
domain: 'https://pre-plug.jiansheku.com', // 插件地址测试
// domain: 'http://192.168.60.210:3400',
ak: 'aec7b3ff2y2q8x6t49a7e2c463ce21912', // 需要携带的sdkId
timelongs: 7200,//刷新token时间
tokentimer: null,
};
},
created() {
if(window.location.host === 'http://szh.jiansheku.com' || window.location.host === 'szh.jiansheku.com'){
this.domain='https://plug.jiansheku.com'
}else {
this.domain='https://pre-plug.jiansheku.com'
this.domain='http://192.168.60.210:3400'
}
this.gettokens();
},
mounted() {
this.iframeLoading(); // 判断iframe页面是否加载完成-当前页控制
window.addEventListener('message', this.linkListener, false);
steerScroll('companyIframe', this.navigation, this.footHeight, true); // iframeId: iframe的id;navigation:页面排除iframe后剩下的顶部高度;footHeight: 页面排除iframe后剩下的底部高度;state:监听or移除监听;parentId: 父级id[不带默认就是铺满整个页面]];_this:指向当前实例(可忽略)
},
beforeDestroy() {
clearInterval(this.iframeTimer); // -当前页控制
window.removeEventListener("message", this.linkListener);
steerScroll('companyIframe', this.navigation, this.footHeight); // iframeId: iframe的id;navigation:页面排除iframe后剩下的顶部高度;footHeight: 页面排除iframe后剩下的底部高度;state:监听or移除监听;parentId: 父级id[不带默认就是铺满整个页面]];_this:指向当前实例(可忽略)
clearInterval(this.tokentimer);
},
methods: {
linkListener(event){
let {data} = event
if(data.id){
getUipIdByCid([data.id]).then(res=>{
if (res.code==200) {
if(res.data&&res.data.length>0&&res.data[0].uipId){
this.$router.push({path: '/enterprise/'+this.encodeStr(data.id)})
}else{
this.$tab.openPage(data.title, '/company/'+this.encodeStr(data.id))
}
}
}).catch(error=>{
});
}else{
if(data.url){
this.$tab.openPage(data.title, data.url).then(() => {
// 执行结束的逻辑
})
}
}
},
gettokens() {
dskAccessToken().then(res => {
if (res.code == 200) {
this.timelongs = res.data.expire;
this.ak = res.data.accessToken;
let initTime = new Date().getTime()
if(window.location.search){
this.src = `${this.domain+this.$route.fullPath}&ak=${this.ak}&initTime=${initTime}&uid=${this.ak}&origin=${window.location.origin}`
}else{
this.src = `${this.domain+this.$route.fullPath}?ak=${this.ak}&initTime=${initTime}&uid=${this.ak}&origin=${window.location.origin}`
}
// if(window.location.search){
// this.src = `${this.domain+this.$route.fullPath}&ak=${this.ak}&initTime=${initTime}&uid=${this.ak}&origin=${window.location.origin}`
// }else{
// this.src = `${this.domain+this.$route.fullPath}?ak=${this.ak}&initTime=${initTime}&uid=${this.ak}&origin=${window.location.origin}`
// }
// }else{ //更新iframe地址的accessToken
// let ifam = document.getElementById('companyIframe')
// ifam.contentWindow.postMessage({ 'accessToken': this.ak, 'initTime': initTime }, '*')
// }
this.refreshtoken();
} else {
clearTimeout(this.tokentimer);
}
});
},
refreshtoken() {
this.tokentimer = setTimeout(() => {
dskAccessToken().then(res => {
if (res.code == 200) {
this.timelongs = res.data.expire;
this.ak = res.data.accessToken;
let ifam = document.getElementById('companyIframe'); //iframe的id
let akObj = res.data.expire; //accessToken接口的返回值
let initTime = new Date().getTime(); //accessToken接口返回后的当前时间戳
ifam.contentWindow.postMessage({ 'accessToken': akObj.accessToken, 'initTime': initTime }, '*');
} else {
clearTimeout(this.tokentimer);
}
});
}, this.timelongs * 1000);
},
//判断iframe页面是否加载完成-当前页控制
iframeLoading() {
let iframeHeight = document.getElementById("companyIframe").clientHeight, number = 0;
this.iframeTimer = setInterval(() => {
number++;
if (document.getElementById("companyIframe").clientHeight != iframeHeight || number == 5000) {
this.loading = false;
clearInterval(this.iframeTimer);
}
});
}
}
}
</script>
<style lang="scss" scoped>
.market-container {
width: 100%;
height: 100%;
padding: 16px 24px;
box-sizing: border-box;
}
</style>
......@@ -250,6 +250,9 @@
this.paramsData=params || {};
this.tableLoading=true;
let data = this.getAreaList(params || this.queryParams)
if(!data.combineId){
data.combineId=this.customerId;
}
memberList(data).then(res=>{
this.isSkeleton = false
this.tableLoading = false
......
......@@ -576,11 +576,11 @@
legend: {
data: [
{
name: '招标数量',
name: '招标数量(个)',
// icon: 'rect',
},
{
name: '招标金额(万元)',
name: '招标金额万元)',
// icon: 'circle',
}
],
......@@ -643,7 +643,7 @@
},
series: [
{
name:'招标金额(万元)',
name:'招标金额万元)',
smooth: false, //平滑
type:"line",
symbolSize: 6,
......@@ -664,12 +664,12 @@
data:data.map(item => item.sum),
},
{
name:'招标数量',
name:'招标数量(个)',
type: 'bar',
barWidth: 20,
tooltip: {
valueFormatter: function (value) {
return value + '个';
return value;
}
},
itemStyle: {
......@@ -754,23 +754,23 @@
axisPointer: {
type: 'cross'
},
formatter: function (params) {
var relVal = params[0].name;
// relVal+='<br/>' +"<span style=\"display:inline-block;margin-right:4px;border-radius:10px;width:10px;height:10px;background-color:#f17f0a;\"></span>" + '次数' +": "+ array[0][relVal.replace(/"/g, '')]
for (var i = 0, l = params.length; i < l; i++) {
relVal += '<br/>' + params[i].marker + params[i].seriesName +": "+ params[i].value
}
return relVal
}
// formatter: function (params) {
// var relVal = params[0].name;
// // relVal+='<br/>' +"<span style=\"display:inline-block;margin-right:4px;border-radius:10px;width:10px;height:10px;background-color:#f17f0a;\"></span>" + '次数' +": "+ array[0][relVal.replace(/"/g, '')]
// for (var i = 0, l = params.length; i < l; i++) {
// relVal += '<br/>' + params[i].marker + params[i].seriesName +": "+ params[i].value
// }
// return relVal
// }
},
legend: {
data: [
{
name: '招标数量',
name: '招标数量(个)',
// icon: 'rect',
},
{
name: '招标金额(万元)',
name: '招标金额万元)',
// icon: 'circle',
}
],
......@@ -833,7 +833,7 @@
},
series: [
{
name:'招标金额(万元)',
name:'招标金额万元)',
smooth: false, //平滑
type:"line",
symbolSize: 6,
......@@ -854,12 +854,12 @@
data:data.map(item => item.sum),
},
{
name:'招标数量',
name:'招标数量(个)',
type: 'bar',
barWidth: 20,
tooltip: {
valueFormatter: function (value) {
return value + '';
return value;
}
},
itemStyle: {
......
......@@ -446,9 +446,12 @@
</div>
<div class="info-list-right">
<p class="card-right-title">
<router-link :to="toEnterpriseDetail(item.jskEid)">
<span @click="toEnterpriseDetail(item.jskEid,item.name)">
<span class="title" v-html="item.name"> </span>
</router-link>
</span>
<!-- <router-link :to="toEnterpriseDetail(item.jskEid,item.name)">
<span class="title" v-html="item.name"> </span>
</router-link> -->
</p>
<p class="card-right-title card-right-title1" :ref="'labels'+item.id" :style="{padding: '16px 0px 12px 0px'}">
......@@ -485,51 +488,75 @@
<p class="card-right-title" style="padding-top: 8px ;">
<template v-if="item.aptitudeCountNew!=null">
<span class="right-title-grey">资质资格:</span>
<router-link :to="toEnterprise(item.jskEid,'')" target="_blank">
<span @click="toEnterprise(item.jskEid,'','',item.name)">
<span class="right-title-blue" v-html="item.aptitudeCountNew"> </span>
</router-link>
</span>
<!-- <router-link :to="toEnterprise(item.jskEid,'','',item.name)" >
<span class="right-title-blue" v-html="item.aptitudeCountNew"> </span>
</router-link> -->
</template>
<template v-if="item.recentlyCount!=null">
<span class="right-title-grey">中标业绩:</span>
<router-link :to="toEnterprise(item.jskEid,'performance')" target="_blank">
<span @click="toEnterprise(item.jskEid,'performance','',item.name)">
<span class="right-title-blue" v-html="item.recentlyCount"> </span>
</span>
<!-- <router-link :to="toEnterprise(item.jskEid,'performance')" >
<span class="right-title-blue" v-html="item.recentlyCount"> </span>
</router-link>
</router-link> -->
</template>
<template v-if="item.skyCount!=null">
<span class="right-title-grey">四库业绩:</span>
<router-link :to="toEnterprise(item.jskEid,'performance',2)" target="_blank">
<span @click="toEnterprise(item.jskEid,'performance',2,item.name)">
<span class="right-title-blue" v-html="item.skyCount"> </span>
</span>
<!-- <router-link :to="toEnterprise(item.jskEid,'performance',2)" >
<span class="right-title-blue" v-html="item.skyCount"> </span>
</router-link>
</router-link> -->
</template>
<template v-if="item.registeredPersonnelCount!=null">
<span class="right-title-grey">注册人员:</span>
<router-link :to="toEnterprise(item.jskEid,'personnel',2)" target="_blank">
<span @click="toEnterprise(item.jskEid,'personnel',2,item.name)">
<span class="right-title-blue" v-html="item.registeredPersonnelCount"> </span>
</span>
<!-- <router-link :to="toEnterprise(item.jskEid,'personnel',2)" >
<span class="right-title-blue" v-html="item.registeredPersonnelCount"> </span>
</router-link>
</router-link> -->
</template>
<template v-if="item.threePersonnelCount!=null">
<span class="right-title-grey">三类人员:</span>
<router-link :to="toEnterprise(item.jskEid,'personnel',5)" target="_blank">
<span @click="toEnterprise(item.jskEid,'personnel',5,item.name)">
<span class="right-title-blue" v-html="item.threePersonnelCount"> </span>
</router-link>
</span>
<!-- <router-link :to="toEnterprise(item.jskEid,'personnel',5)" >
<span class="right-title-blue" v-html="item.threePersonnelCount"> </span>
</router-link> -->
</template>
<template v-if="item.jskBidCount>0">
<span class="right-title-grey">招标公告:</span>
<router-link :to="toEnterprise(item.jskEid,'business',5)" target="_blank">
<span @click="toEnterprise(item.jskEid,'business',5,item.name)">
<span class="right-title-blue" v-html="item.jskBidCount"> </span>
</router-link>
</span>
<!-- <router-link :to="toEnterprise(item.jskEid,'business',5)" >
<span class="right-title-blue" v-html="item.jskBidCount"> </span>
</router-link> -->
</template>
<template v-if="item.customerCount>0">
<span class="right-title-grey">客户:</span>
<router-link :to="toEnterprise(item.jskEid,'business',1)" target="_blank">
<span @click="toEnterprise(item.jskEid,'business',1,item.name)">
<span class="right-title-blue" v-html="item.customerCount"> </span>
</router-link>
</span>
<!-- <router-link :to="toEnterprise(item.jskEid,'business',1)" >
<span class="right-title-blue" v-html="item.customerCount"> </span>
</router-link> -->
</template>
<template v-if="item.supplierCount>0">
<span class="right-title-grey">供应商:</span>
<router-link :to="toEnterprise(item.jskEid,'business',2)" target="_blank">
<span @click="toEnterprise(item.jskEid,'business',2,item.name)">
<span class="right-title-blue" v-html="item.supplierCount"> </span>
</span>
<!-- <router-link :to="toEnterprise(item.jskEid,'business',2)" >
<span class="right-title-blue" v-html="item.supplierCount"> </span>
</router-link>
</router-link> -->
</template>
</p>
<p class="card-right-title" v-if="item.formerName!=null&&(item.formerName.indexOf('color')!=-1||item.name.indexOf('color')!=-1)"
......@@ -2748,12 +2775,13 @@ export default {
},
toEnterprise(id, html, type) {
return '/company/' + encodeStr(id) + '/' + (html ? '?html=' + html : '') + (type ? '&flag=true&type=' + type : '');
toEnterprise(id, html, type,name) {
// this.$tab.openPage(name, '/company/' + encodeStr(id) + '/' + (html ? '?html=' + html : '') + (type ? '&flag=true&type=' + type : ''))
this.$router.push({path:'/company/' + encodeStr(id) + '/' + (html ? html : '') + (type ? '?flag=true&type=' + type : '')} )
},
toEnterpriseDetail(id) {
return '/company/' + encodeStr(id) + '/?index=true';
toEnterpriseDetail(id,name) {
// this.$tab.openPage(name, '/company/' + encodeStr(id) + '/?index=true')
this.$router.push({path:'/company/' + encodeStr(id) + '/?index=true'} )
},
labelsWidth(e, t = 0) {
......
......@@ -97,6 +97,12 @@
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right">
<template slot-scope="scope" v-if="scope.row.roleId !== 1">
<el-button
size="mini"
type="text"
icon="el-icon-refresh"
@click="handleSync(scope.row)"
>同步</el-button>
<el-button
size="mini"
type="text"
......@@ -205,6 +211,19 @@
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
<el-dialog
title="权限同步"
:visible.sync="dialogVisible1"
custom-class="sync"
width="400px">
<p style="font-size: 16px;"><i class="el-icon-warning-outline" style="margin-right: 8px;"></i>是否确认同步?</p>
<p>温馨提示:此操作可能会影响正在使用的用户,建议合理安排同步时间</p>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogVisible1 = false">取消</el-button>
<el-button type="primary" @click="handleConfirm()" >同步</el-button>
</div>
</el-dialog>
</div>
</template>
......@@ -215,7 +234,8 @@
getTenant,
getTenantList,
saveTenant,
selectTenant
selectTenant,
syncTenantPackage
} from '@/api/enterpriseManagement/enterpriseManagement'
export default {
......@@ -242,6 +262,7 @@
title: "",
// 是否显示弹出层
open: false,
dialogVisible1: false,
// 查询参数
queryParams: {
pageNum: 1,
......@@ -284,6 +305,7 @@
},
//企业方案列表
packageList:[],
syncItem:{}
};
},
created() {
......@@ -360,6 +382,22 @@
this.title = "添加企业";
this.getpack()
},
/** 同步弹窗显示 */
handleSync(row) {
this.dialogVisible1=true;
this.syncItem=row;
},
/** 同步按钮操作 */
handleConfirm() {
let _this = this
syncTenantPackage({tenantId:this.syncItem.tenantId,packageId:this.syncItem.packageId}).then(res => {
if(res.code === 200){
_this.$message.success(res.msg);
this.dialogVisible1=false;
}
});
},
/** 修改按钮操作 */
handleUpdate(row) {
this.disabled = false
......@@ -447,4 +485,14 @@
}
};
</script>
<style lang="scss" scoped>
::v-deep .sync{
.el-dialog__header{
border-bottom: 1px solid #eee;
}
.el-dialog__body{
padding: 15px 20px
}
}
</style>
......@@ -397,8 +397,7 @@ export default {
});
},
addressListbtn(data) {
this.province=data.province;
this.provinceId=data.provinceId;
this.province=data.province; this.provinceId=data.provinceId;
this.dataQuery.province=data.provinces;
let params={}
if(data){
......
......@@ -529,7 +529,7 @@
yAxisIndex: 1,
tooltip: {
valueFormatter: function (value) {
return value + '万元'
return value
}
},
itemStyle: {
......@@ -543,7 +543,7 @@
barWidth: 20,
tooltip: {
valueFormatter: function (value) {
return value + '个';
return value;
}
},
itemStyle: {
......@@ -791,7 +791,7 @@
yAxisIndex: 1,
tooltip: {
valueFormatter: function (value) {
return value + '万元'
return value
}
},
itemStyle: {
......@@ -805,7 +805,7 @@
barWidth: 20,
tooltip: {
valueFormatter: function (value) {
return value + '个';
return value;
}
},
itemStyle: {
......@@ -977,6 +977,11 @@
smooth: false, //平滑
type:"line",
symbolSize: 6, //折线拐点大小
tooltip: {
valueFormatter: function (value) {
return value + '%';
}
},
itemStyle: {
normal: {
borderWidth: 4,
......@@ -990,6 +995,11 @@
smooth: false, //平滑
type:"line",
symbolSize: 6, //折线拐点大小
tooltip: {
valueFormatter: function (value) {
return value + '%';
}
},
itemStyle: {
normal: {
borderWidth: 4,
......@@ -1003,6 +1013,11 @@
smooth: false, //平滑
type:"line",
symbolSize: 6, //折线拐点大小
tooltip: {
valueFormatter: function (value) {
return value + '%';
}
},
itemStyle: {
normal: {
borderWidth: 4,
......
......@@ -11,7 +11,9 @@
<script>
import { steerScroll } from '@/assets/js/jskplug';
import { dskAccessToken } from '@/api/common';
import {encodeStr} from "@/assets/js/common"
import MaxPageSizeTip from "@/views/components/MaxPageSizeTip.vue";
import { getUipIdByCid } from '@/api/macro/macro'
export default {
name: 'Enterprise',
components: {
......@@ -19,6 +21,7 @@ export default {
},
data() {
return {
encodeStr,
loading: false, // 是否加载完成-当前页控制
iframeTimer: '', // 是否加载中定时器-当前页控制
footHeight: 0, //底部高度,若为0(页面内部嵌套或者没有底部板块)
......@@ -39,12 +42,15 @@ export default {
if (window.location.host === 'http://szh.jiansheku.com' || window.location.host === 'szh.jiansheku.com') {
this.domain = 'https://plug.jiansheku.com';
} else {
// this.domain='https://pre-plug.jiansheku.com'
this.domain = 'http://192.168.60.104:3400';
this.domain='https://pre-plug.jiansheku.com'
// this.domain = 'http://192.168.60.8:3400';
this.domain = 'http://192.168.60.210:3400';
}
this.gettokens();
this.iframeObserver();
let that = this
window.addEventListener("message", this.pagecapListener, { passive: true });
window.addEventListener('message', this.linkListener, false);
},
mounted() {
this.iframeLoading(); // 判断iframe页面是否加载完成-当前页控制
......@@ -55,10 +61,34 @@ export default {
steerScroll('companyIframe', this.navigation, this.footHeight); // iframeId: iframe的id;navigation:页面排除iframe后剩下的顶部高度;footHeight: 页面排除iframe后剩下的底部高度;state:监听or移除监听;parentId: 父级id[不带默认就是铺满整个页面]];_this:指向当前实例(可忽略)
clearInterval(this.tokentimer);
window.removeEventListener("message", this.pagecapListener, { passive: true });
window.removeEventListener("message", this.linkListener);
// 移除layout样式
this.iframeIns.contentWindow.postMessage("removeHtmlLayoutStyle", { targetOrigin: this.domain, });
},
methods: {
linkListener(event){
let {data} = event
if(data.id){
getUipIdByCid([data.id]).then(res=>{
if (res.code==200) {
if(res.data&&res.data.length>0&&res.data[0].uipId){
this.$router.push({path: '/enterprise/'+this.encodeStr(data.id)})
}else{
this.$tab.openPage(data.title, '/company/'+this.encodeStr(data.id))
}
}
}).catch(error=>{
});
}else{
if(data.url){
this.$tab.openPage(data.title, data.url).then(() => {
// 执行结束的逻辑
})
}
}
},
async iframeObserver() {
try {
await this.$nextTick();
......
......@@ -8,18 +8,12 @@
<el-option v-for="(item,index) in companytype" :label="item.dictLabel" :value="item.dictValue"></el-option>
</el-select>
<div class="searchInput small">
<div class="normal-search-container" @click="showSearchBox = true" v-if="!showSearchBox">
<img src="@/assets/images/enterprise/enterprise-search-icon.svg" alt="">
<span>输入关键词查询</span>
<div @mouseover="showSearchBox = true" @mouseleave="leaves" >
<img class="ss" src="@/assets/images/enterprise/enterprise-search-icon.svg" alt="">
<span class="cx" v-if="!showSearchBox">搜索</span>
<el-input v-if="showSearchBox" @keyup.enter.native="handleCurrentChange(1)" clearable @clear="handleCurrentChange(1)" v-model="searchParam.companyName"
placeholder="输入关键词查询"></el-input>
</div>
<!--&lt;!&ndash; 输入框展开后样式 &ndash;&gt;-->
<transition @enter="onEnter" appear mode="out-in">
<div class="cooperate-name enterprise-search-container" id="focus1" v-if="showSearchBox">
<el-input clearable @clear="handleCurrentChange(1)" @focus="clickFocus('focus1')" @blur="clickFocus('focus1')" v-model="searchParam.companyName"
placeholder="输入关键词查询"></el-input>
<span @click="handleCurrentChange(1)">搜索</span>
</div>
</transition>
</div>
<div class="btn btn_primary h32 b3" @click="opennew" v-if="isDisableds == false"><div class="img img1"></div>添加相关企业</div>
</div>
......@@ -196,7 +190,6 @@
import { addXGQY, delXGQY, getXGQY, saveXGQY } from '@/api/project/project'
import { getDictType, getEnterprise } from '@/api/main'
import skeleton from './skeleton'
import gsap from "gsap";
export default {
components:{skeleton},
......@@ -264,9 +257,10 @@
mounted(){
},
methods:{
clickFocus(e) {
document.getElementById(e).classList.toggle('span-ba');
leaves(){
if(this.searchParam.companyName == ""){
this.showSearchBox = false
}
},
getDetail(row){
this.isedit = true
......@@ -373,21 +367,6 @@
remark:'',
}
},
onEnter(el, done) {
gsap.from(el, {
opacity: 0,
width: 0,
});
gsap.to(el, {
opacity: 1,
width: 242,
onComplete() {
// 完成动画聚焦输入框
el.querySelector("input").focus();
done();
}
});
},
}
}
</script>
......@@ -406,81 +385,53 @@
}
}
.searchInput .el-input{
width: 68%;
width: 100%;
position: absolute;
left: 0;
top: 0;
margin-top: 0;
z-index: 0;
::v-deep .el-input__inner{
background: #F4F6F9 !important;
padding-left: 36px !important;
padding-right: 35px !important;
}
}
.searchInput.small{
width: 257px;
}
.searchInput{
.normal-search-container {
display: flex;
align-items: center;
cursor: pointer;
height: 34px;
&:hover {
& > span {
color: #0081ff;
}
}
& > img {
width: 16px;
height: 16px;
margin-left: 12px;
/*width: 257px;*/
border: 0;
border-radius: 4px !important;
.ss{
position: absolute;
z-index: 1;
left: 13px;
top: 9px;
width: 13px;
}
& > span {
.cx{
color: #232323;
color: rgba(35, 35, 35, 0.4);
font-weight: 400;
margin-left: 8px;
line-height: 22px;
opacity: 0.8;
font-size: 14px;
margin-left: 36px;
line-height: 32px;
}
}
.cooperate-name {
display: flex;
border-radius: 2px;
border: 1px solid #d9d9d9;
line-height: 30px;
height: 30px;
float: left;
width: 100%;
span {
width: 60px;
height: 28px;
line-height: 28px;
font-size: 14px;
background: #f5f5f5;
text-align: center;
color: #0081ff;
border: 1px solid #efefef;
border-left: 0;
cursor: pointer;
input::-webkit-input-placeholder { /* Chrome/Opera/Safari */
color: #232323;
opacity: 0.4;
}
&.span-ba {
border: 1px solid #0081ff;
span {
color: #ffffff;
background: #0081ff;
border: 1px solid #0081ff;
}
input::-moz-placeholder { /* Firefox 19+ */
color: #232323;
opacity: 0.4;
}
::v-deep .el-input {
flex: 1;
input:-ms-input-placeholder { /* IE 10+ */
color: #232323;
opacity: 0.4;
}
::v-deep .el-input__inner {
border: 0;
line-height: 28px;
height: 28px;
position: absolute;
top: 1px;
padding-right: 28px;
font-size: 12px;
padding-left: 8px;
input:-moz-placeholder { /* Firefox 18- */
color: #232323;
opacity: 0.4;
}
}
}
.w102{
width: 102px;
}
......
......@@ -5,18 +5,12 @@
<div class="cardtitles">资料文档</div>
<div class="searchbtns">
<div class="searchInput small">
<div class="normal-search-container" @click="showSearchBox = true" v-if="!showSearchBox">
<img src="@/assets/images/enterprise/enterprise-search-icon.svg" alt="">
<span>输入关键词查询</span>
<div @mouseover="showSearchBox = true" @mouseleave="leaves" >
<img class="ss" src="@/assets/images/enterprise/enterprise-search-icon.svg" alt="">
<span class="cx" v-if="!showSearchBox">搜索</span>
<el-input v-if="showSearchBox" @keyup.enter.native="handleCurrentChange(1)" clearable @clear="handleCurrentChange(1)" v-model="param.keyword"
placeholder="输入关键词查询"></el-input>
</div>
<!--&lt;!&ndash; 输入框展开后样式 &ndash;&gt;-->
<transition @enter="onEnter" appear mode="out-in">
<div class="cooperate-name enterprise-search-container" id="focus1" v-if="showSearchBox">
<el-input clearable @clear="handleCurrentChange(1)" @focus="clickFocus('focus1')" @blur="clickFocus('focus1')" v-model="param.keyword"
placeholder="输入关键词查询"></el-input>
<span @click="handleCurrentChange(1)">搜索</span>
</div>
</transition>
</div>
<!--<div class="btn btn_primary h32 b2" @click="getUP" v-if="fileDatas.total>0"><div class="img img2"></div>上传</div>-->
......@@ -161,7 +155,6 @@
import { getToken } from '@/utils/auth'
import { delZLWD, getZLWD } from '@/api/project/project'
import skeleton from './skeleton'
import gsap from "gsap";
export default {
components:{skeleton},
......@@ -204,23 +197,10 @@
// console.log(this.$ref)
},
methods:{
clickFocus(e) {
document.getElementById(e).classList.toggle('span-ba');
},
onEnter(el, done) {
gsap.from(el, {
opacity: 0,
width: 0,
});
gsap.to(el, {
opacity: 1,
width: 242,
onComplete() {
// 完成动画聚焦输入框
el.querySelector("input").focus();
done();
}
});
leaves(){
if(this.searchParam.companyName == ""){
this.showSearchBox = false
}
},
getall(){
this.param.filePath = this.detailId ? this.detailId : this.$route.query.id
......@@ -343,77 +323,53 @@
<style lang="scss" scoped>
.searchInput.small{
width: 257px;
}
.searchInput{
.normal-search-container {
display: flex;
align-items: center;
cursor: pointer;
height: 34px;
&:hover {
& > span {
color: #0081ff;
}
}
& > img {
width: 16px;
height: 16px;
margin-left: 12px;
}
& > span {
color: #232323;
color: rgba(35, 35, 35, 0.4);
font-weight: 400;
margin-left: 8px;
line-height: 22px;
font-size: 14px;
}
.searchInput .el-input{
width: 100%;
position: absolute;
left: 0;
top: 0;
margin-top: 0;
z-index: 0;
::v-deep .el-input__inner{
background: #F4F6F9 !important;
padding-left: 36px !important;
padding-right: 35px !important;
}
.cooperate-name {
display: flex;
border-radius: 2px;
border: 1px solid #d9d9d9;
line-height: 30px;
height: 30px;
float: left;
width: 100%;
span {
width: 60px;
height: 28px;
line-height: 28px;
font-size: 14px;
background: #f5f5f5;
text-align: center;
color: #0081ff;
border: 1px solid #efefef;
border-left: 0;
cursor: pointer;
}
&.span-ba {
border: 1px solid #0081ff;
span {
color: #ffffff;
background: #0081ff;
border: 1px solid #0081ff;
}
}
::v-deep .el-input {
flex: 1;
}
::v-deep .el-input__inner {
border: 0;
line-height: 28px;
height: 28px;
position: absolute;
top: 1px;
padding-right: 28px;
font-size: 12px;
padding-left: 8px;
}
}
.searchInput.small{
/*width: 257px;*/
border: 0;
border-radius: 4px !important;
.ss{
position: absolute;
z-index: 1;
left: 13px;
top: 9px;
width: 13px;
}
.cx{
color: #232323;
opacity: 0.8;
font-size: 14px;
margin-left: 36px;
line-height: 32px;
}
input::-webkit-input-placeholder { /* Chrome/Opera/Safari */
color: #232323;
opacity: 0.4;
}
input::-moz-placeholder { /* Firefox 19+ */
color: #232323;
opacity: 0.4;
}
input:-ms-input-placeholder { /* IE 10+ */
color: #232323;
opacity: 0.4;
}
input:-moz-placeholder { /* Firefox 18- */
color: #232323;
opacity: 0.4;
}
}
v-deep.el-upload:focus{
......
......@@ -34,8 +34,8 @@ module.exports = {
proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: {
// target: `http://47.104.91.229:9099/prod-api`,//测试
target: `http://localhost`,//测试
target: `http://47.104.91.229:9099/prod-api`,//测试
// target: `http://localhost`,//测试
// target: `http://122.9.160.122:9011`, //线上
// target: `http://192.168.0.165:9098`,//施
// target: `http://192.168.60.6:9098`,//谭
......
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