项目库与详情

prod
吕天方 10 months ago
parent e0057b7d03
commit b1ec7eb520

@ -5,7 +5,8 @@ VUE_APP_TITLE = 金鸡湖现代服务业品牌管理系统
ENV = 'development'
# 金鸡湖现代服务业品牌管理系统/开发环境
VUE_APP_BASE_API = 'http://192.168.0.114:9040'
# VUE_APP_BASE_API = 'http://192.168.0.114:9040'
VUE_APP_BASE_API = 'http://192.168.0.109:9040'
# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true

@ -0,0 +1,77 @@
import request from "@/utils/request"
// 分页查询项目库
export function jProject(params) {
return request({
url: "/jjh/jProject",
method: "get",
params
})
}
// 根据主键查询单个项目库
export function jProjectId(id) {
return request({
url: "/jjh/jProject/" + id,
method: "get",
})
}
// 删除单个项目
export function jProjectDel(params) {
return request({
url: "/jjh/jProject",
method: "delete",
params
})
}
/**
* 备忘录
*/
// 分页查询所有数据
export function getJMemorandum(params) {
return request({
url: "/jjh/jMemorandum",
method: "get",
params
})
}
// 未使用分页
export function getJMemorandumList(params) {
return request({
url: "/jjh/jMemorandum/getIdToList",
method: "get",
params
})
}
// id查询单条数据
export function getJMemorandumId(id) {
return request({
url: "/jjh/jMemorandum/" + id,
method: "get",
})
}
// 新建备忘录
export function postJMemorandum(data) {
return request({
url: "/jjh/jMemorandum",
method: "post",
data
})
}
// 修改备忘录
export function putJMemorandum(data) {
return request({
url: "/jjh/jMemorandum",
method: "put",
data
})
}
// 删除备忘录
export function delJMemorandum(params) {
return request({
url: "/jjh/jMemorandum",
method: "delete",
params
})
}

@ -55,45 +55,87 @@
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont">&#xe61e;</span>
<div class="name">安全保障</div>
<div class="code-name">&amp;#xe61e;</div>
<span class="icon iconfont">&#xe630;</span>
<div class="name">返回</div>
<div class="code-name">&amp;#xe630;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe606;</span>
<div class="name"></div>
<div class="code-name">&amp;#xe606;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe74b;</span>
<div class="name">审批通过-copy</div>
<div class="code-name">&amp;#xe74b;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe62d;</span>
<div class="name">待审批</div>
<div class="code-name">&amp;#xe62d;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe742;</span>
<div class="name">审批通过</div>
<div class="code-name">&amp;#xe742;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe74a;</span>
<div class="name">待审批-copy</div>
<div class="code-name">&amp;#xe74a;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe705;</span>
<div class="name">点-copy</div>
<div class="code-name">&amp;#xe705;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe704;</span>
<div class="name">空-圆</div>
<div class="code-name">&amp;#xe704;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe61f;</span>
<div class="name">消息-置灰</div>
<div class="name">删除</div>
<div class="code-name">&amp;#xe61f;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe620;</span>
<div class="name">喜欢</div>
<div class="code-name">&amp;#xe620;</div>
<span class="icon iconfont">&#xe600;</span>
<div class="name">删除</div>
<div class="code-name">&amp;#xe600;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe621;</span>
<div class="name">更多</div>
<div class="code-name">&amp;#xe621;</div>
<span class="icon iconfont">&#xe63d;</span>
<div class="name">编辑-copy</div>
<div class="code-name">&amp;#xe63d;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe622;</span>
<div class="name">首页-置灰</div>
<div class="code-name">&amp;#xe622;</div>
<span class="icon iconfont">&#xe603;</span>
<div class="name">编辑</div>
<div class="code-name">&amp;#xe603;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe623;</span>
<div class="name">个人中心-置灰</div>
<div class="code-name">&amp;#xe623;</div>
<span class="icon iconfont">&#xe63c;</span>
<div class="name">新建 </div>
<div class="code-name">&amp;#xe63c;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe624;</span>
<div class="name">看点-置灰</div>
<div class="code-name">&amp;#xe624;</div>
<span class="icon iconfont">&#xe635;</span>
<div class="name">导入</div>
<div class="code-name">&amp;#xe635;</div>
</li>
</ul>
@ -114,9 +156,9 @@
<pre><code class="language-css"
>@font-face {
font-family: 'iconfont';
src: url('iconfont.woff2?t=1711346025444') format('woff2'),
url('iconfont.woff?t=1711346025444') format('woff'),
url('iconfont.ttf?t=1711346025444') format('truetype');
src: url('iconfont.woff2?t=1711530177681') format('woff2'),
url('iconfont.woff?t=1711530177681') format('woff'),
url('iconfont.ttf?t=1711530177681') format('truetype');
}
</code></pre>
<h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@ -143,65 +185,128 @@
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont icon-jc-anquanbaozhang"></span>
<span class="icon iconfont icon-jc-55fanhui"></span>
<div class="name">
返回
</div>
<div class="code-name">.icon-jc-55fanhui
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-jc-dian"></span>
<div class="name">
</div>
<div class="code-name">.icon-jc-dian
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-jc-shenpitongguo-copy"></span>
<div class="name">
审批通过-copy
</div>
<div class="code-name">.icon-jc-shenpitongguo-copy
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-jc-daishenpi1"></span>
<div class="name">
待审批
</div>
<div class="code-name">.icon-jc-daishenpi1
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-jc-shenpitongguo"></span>
<div class="name">
审批通过
</div>
<div class="code-name">.icon-jc-shenpitongguo
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-jc-daishenpi1-copy"></span>
<div class="name">
安全保障
待审批-copy
</div>
<div class="code-name">.icon-jc-anquanbaozhang
<div class="code-name">.icon-jc-daishenpi1-copy
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-jc-xiaoxi-zhihui"></span>
<span class="icon iconfont icon-jc-dian-green"></span>
<div class="name">
消息-置灰
点-copy
</div>
<div class="code-name">.icon-jc-xiaoxi-zhihui
<div class="code-name">.icon-jc-dian-green
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-jc-xihuan"></span>
<span class="icon iconfont icon-jc-kong-yuan"></span>
<div class="name">
喜欢
空-圆
</div>
<div class="code-name">.icon-jc-xihuan
<div class="code-name">.icon-jc-kong-yuan
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-jc-gengduo"></span>
<span class="icon iconfont icon-jc-shanchu"></span>
<div class="name">
更多
删除
</div>
<div class="code-name">.icon-jc-gengduo
<div class="code-name">.icon-jc-shanchu
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-jc-shouye-zhihui"></span>
<span class="icon iconfont icon-jc-shanchu-select"></span>
<div class="name">
首页-置灰
删除
</div>
<div class="code-name">.icon-jc-shouye-zhihui
<div class="code-name">.icon-jc-shanchu-select
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-jc-gerenzhongxin-zhihui"></span>
<span class="icon iconfont icon-jc-bianji-copy"></span>
<div class="name">
个人中心-置灰
编辑-copy
</div>
<div class="code-name">.icon-jc-gerenzhongxin-zhihui
<div class="code-name">.icon-jc-bianji-copy
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-jc-kandian-zhihui"></span>
<span class="icon iconfont icon-jc-bianji"></span>
<div class="name">
看点-置灰
编辑
</div>
<div class="code-name">.icon-jc-kandian-zhihui
<div class="code-name">.icon-jc-bianji
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-jc-xinjian"></span>
<div class="name">
新建
</div>
<div class="code-name">.icon-jc-xinjian
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-jc-daoru"></span>
<div class="name">
导入
</div>
<div class="code-name">.icon-jc-daoru
</div>
</li>
@ -234,58 +339,114 @@
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-jc-anquanbaozhang"></use>
<use xlink:href="#icon-jc-55fanhui"></use>
</svg>
<div class="name">返回</div>
<div class="code-name">#icon-jc-55fanhui</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-jc-dian"></use>
</svg>
<div class="name"></div>
<div class="code-name">#icon-jc-dian</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-jc-shenpitongguo-copy"></use>
</svg>
<div class="name">审批通过-copy</div>
<div class="code-name">#icon-jc-shenpitongguo-copy</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-jc-daishenpi1"></use>
</svg>
<div class="name">待审批</div>
<div class="code-name">#icon-jc-daishenpi1</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-jc-shenpitongguo"></use>
</svg>
<div class="name">审批通过</div>
<div class="code-name">#icon-jc-shenpitongguo</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-jc-daishenpi1-copy"></use>
</svg>
<div class="name">待审批-copy</div>
<div class="code-name">#icon-jc-daishenpi1-copy</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-jc-dian-green"></use>
</svg>
<div class="name">点-copy</div>
<div class="code-name">#icon-jc-dian-green</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-jc-kong-yuan"></use>
</svg>
<div class="name">安全保障</div>
<div class="code-name">#icon-jc-anquanbaozhang</div>
<div class="name">空-圆</div>
<div class="code-name">#icon-jc-kong-yuan</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-jc-xiaoxi-zhihui"></use>
<use xlink:href="#icon-jc-shanchu"></use>
</svg>
<div class="name">消息-置灰</div>
<div class="code-name">#icon-jc-xiaoxi-zhihui</div>
<div class="name">删除</div>
<div class="code-name">#icon-jc-shanchu</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-jc-xihuan"></use>
<use xlink:href="#icon-jc-shanchu-select"></use>
</svg>
<div class="name">喜欢</div>
<div class="code-name">#icon-jc-xihuan</div>
<div class="name">删除</div>
<div class="code-name">#icon-jc-shanchu-select</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-jc-gengduo"></use>
<use xlink:href="#icon-jc-bianji-copy"></use>
</svg>
<div class="name">更多</div>
<div class="code-name">#icon-jc-gengduo</div>
<div class="name">编辑-copy</div>
<div class="code-name">#icon-jc-bianji-copy</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-jc-shouye-zhihui"></use>
<use xlink:href="#icon-jc-bianji"></use>
</svg>
<div class="name">首页-置灰</div>
<div class="code-name">#icon-jc-shouye-zhihui</div>
<div class="name">编辑</div>
<div class="code-name">#icon-jc-bianji</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-jc-gerenzhongxin-zhihui"></use>
<use xlink:href="#icon-jc-xinjian"></use>
</svg>
<div class="name">个人中心-置灰</div>
<div class="code-name">#icon-jc-gerenzhongxin-zhihui</div>
<div class="name">新建 </div>
<div class="code-name">#icon-jc-xinjian</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-jc-kandian-zhihui"></use>
<use xlink:href="#icon-jc-daoru"></use>
</svg>
<div class="name">看点-置灰</div>
<div class="code-name">#icon-jc-kandian-zhihui</div>
<div class="name">导入</div>
<div class="code-name">#icon-jc-daoru</div>
</li>
</ul>

@ -1,53 +1,71 @@
@font-face {
font-family: "iconfont"; /* Project id 4480457 */
src: url('iconfont.woff2?t=1711346025444') format('woff2'),
url('iconfont.woff?t=1711346025444') format('woff'),
url('iconfont.ttf?t=1711346025444') format('truetype');
src: url('iconfont.woff2?t=1711530177681') format('woff2'),
url('iconfont.woff?t=1711530177681') format('woff'),
url('iconfont.ttf?t=1711530177681') format('truetype');
}
.iconfont {
font-family: "iconfont" !important;
font-size: 14px;
font-size: 16px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
[class^="icon-jc"],
[class*="icon-jc"]
{
font-family: "iconfont" !important;
font-size: 14px;
font-style: normal;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
.icon-jc-55fanhui:before {
content: "\e630";
}
.icon-jc-dian:before {
content: "\e606";
}
.icon-jc-shenpitongguo-copy:before {
content: "\e74b";
}
.icon-jc-daishenpi1:before {
content: "\e62d";
}
.icon-jc-shenpitongguo:before {
content: "\e742";
}
.icon-jc-daishenpi1-copy:before {
content: "\e74a";
}
.icon-jc-dian-green:before {
content: "\e705";
}
.icon-jc-anquanbaozhang:before {
content: "\e61e";
.icon-jc-kong-yuan:before {
content: "\e704";
}
.icon-jc-xiaoxi-zhihui:before {
.icon-jc-shanchu:before {
content: "\e61f";
}
.icon-jc-xihuan:before {
content: "\e620";
.icon-jc-shanchu-select:before {
content: "\e600";
}
.icon-jc-gengduo:before {
content: "\e621";
.icon-jc-bianji-copy:before {
content: "\e63d";
}
.icon-jc-shouye-zhihui:before {
content: "\e622";
.icon-jc-bianji:before {
content: "\e603";
}
.icon-jc-gerenzhongxin-zhihui:before {
content: "\e623";
.icon-jc-xinjian:before {
content: "\e63c";
}
.icon-jc-kandian-zhihui:before {
content: "\e624";
.icon-jc-daoru:before {
content: "\e635";
}

File diff suppressed because one or more lines are too long

@ -1,58 +1,107 @@
{
"id": "4480457",
"name": "no name",
"name": "jin-ji-hu",
"font_family": "iconfont",
"css_prefix_text": "icon-jc-",
"description": "",
"glyphs": [
{
"icon_id": "33986995",
"name": "安全保障",
"font_class": "anquanbaozhang",
"unicode": "e61e",
"unicode_decimal": 58910
"icon_id": "16589939",
"name": "返回",
"font_class": "55fanhui",
"unicode": "e630",
"unicode_decimal": 58928
},
{
"icon_id": "33986996",
"name": "消息-置灰",
"font_class": "xiaoxi-zhihui",
"icon_id": "14046404",
"name": "点",
"font_class": "dian",
"unicode": "e606",
"unicode_decimal": 58886
},
{
"icon_id": "39693775",
"name": "审批通过-copy",
"font_class": "shenpitongguo-copy",
"unicode": "e74b",
"unicode_decimal": 59211
},
{
"icon_id": "20831612",
"name": "待审批",
"font_class": "daishenpi1",
"unicode": "e62d",
"unicode_decimal": 58925
},
{
"icon_id": "23249943",
"name": "审批通过",
"font_class": "shenpitongguo",
"unicode": "e742",
"unicode_decimal": 59202
},
{
"icon_id": "39693752",
"name": "待审批-copy",
"font_class": "daishenpi1-copy",
"unicode": "e74a",
"unicode_decimal": 59210
},
{
"icon_id": "39692796",
"name": "点-copy",
"font_class": "dian-green",
"unicode": "e705",
"unicode_decimal": 59141
},
{
"icon_id": "23114773",
"name": "空-圆",
"font_class": "kong-yuan",
"unicode": "e704",
"unicode_decimal": 59140
},
{
"icon_id": "9262906",
"name": "删除",
"font_class": "shanchu",
"unicode": "e61f",
"unicode_decimal": 58911
},
{
"icon_id": "33986997",
"name": "喜欢",
"font_class": "xihuan",
"unicode": "e620",
"unicode_decimal": 58912
"icon_id": "27859940",
"name": "删除",
"font_class": "shanchu-select",
"unicode": "e600",
"unicode_decimal": 58880
},
{
"icon_id": "33986998",
"name": "更多",
"font_class": "gengduo",
"unicode": "e621",
"unicode_decimal": 58913
"icon_id": "39683075",
"name": "编辑-copy",
"font_class": "bianji-copy",
"unicode": "e63d",
"unicode_decimal": 58941
},
{
"icon_id": "33986999",
"name": "首页-置灰",
"font_class": "shouye-zhihui",
"unicode": "e622",
"unicode_decimal": 58914
"icon_id": "2211276",
"name": "编辑",
"font_class": "bianji",
"unicode": "e603",
"unicode_decimal": 58883
},
{
"icon_id": "33987000",
"name": "个人中心-置灰",
"font_class": "gerenzhongxin-zhihui",
"unicode": "e623",
"unicode_decimal": 58915
"icon_id": "774412",
"name": "新建 ",
"font_class": "xinjian",
"unicode": "e63c",
"unicode_decimal": 58940
},
{
"icon_id": "33987001",
"name": "看点-置灰",
"font_class": "kandian-zhihui",
"unicode": "e624",
"unicode_decimal": 58916
"icon_id": "4770724",
"name": "导入",
"font_class": "daoru",
"unicode": "e635",
"unicode_decimal": 58933
}
]
}

@ -192,3 +192,7 @@ aside {
margin-bottom: 10px;
}
}
/* 此处的 div 可以依照情况替换成对应的元素名称 */
div::-webkit-scrollbar{
display:none
}

@ -1,5 +1,18 @@
//
.my-L-breadcrumb {
height: 55px;
display: flex;
align-items: center;
justify-content: space-between;
padding-right: 20px;
.icon-jc-55fanhui {
color: #192a92;
font-size: 20px;
cursor: pointer;
}
}
.L-public-main {
padding: 6px 6px 39px 6px;
padding: 6px 6px 6px 6px;
width: 100%;
height: 100%;
.L-main {
@ -10,15 +23,8 @@
header {
margin-bottom: 25px;
.import-btn {
padding: 1px 5px;
span {
display: flex;
align-items: center;
.btn-img {
width: 15px;
margin: 5px;
}
}
margin-top: 3px;
padding: 6px 15px;
}
}
.el-table {
@ -93,4 +99,511 @@
}
}
}
}
.projectInfo {
.el-row {
height: 100%;
.el-col {
height: 100%;
}
}
.left-info{
height: calc(25% - 5px);
background-color: white;
padding: 28px 28px 0 28px;
.project-info-title {
margin-bottom: 28px;
font-family: PingFang-SC, PingFang-SC;
font-weight: bold;
font-size: 14px;
color: #333333;
}
.el-descriptions-item__label {
background: #F5F8FA;
width: 230px;
font-family: PingFang-SC, PingFang-SC;
font-weight: 500;
font-size: 14px;
color: #333333;
}
.el-descriptions-item__content {
font-family: PingFang-SC, PingFang-SC;
font-weight: 500;
width: 430px;
font-size: 14px;
color: #333333;
}
.info-link {
// display: flex;
// align-items: center;
font-family: PingFang-SC, PingFang-SC;
font-weight: 500;
font-size: 14px;
color: #333;
a {
text-decoration: underline;
color: #134EE6;
margin-left: 20px;
}
.a-primary {
margin-left: 0;
color: #1890FF;
}
}
}
.left-tabs{
height: calc(75% - 5px);
margin-top: 10px;
background-color: white;
.tabs-top {
width: 100%;
display: flex;
padding: 15px 28px;
border-bottom: 1px solid #E4E7ED;
.tabs-top-item {
padding: 5px 34px;
font-family: PingFang-SC, PingFang-SC;
font-weight: bold;
font-size: 14px;
color: #999999;
cursor: pointer;
}
.active-item {
background: #1890FF;
border-radius: 5px 5px 5px 5px;
font-family: PingFang-SC, PingFang-SC;
font-weight: bold;
font-size: 14px;
color: #FFFFFF;
}
}
.tabs-bottom {
padding: 20px 28px 0 28px;
.tabOneLabel,.tabOneContent {
width: 220px;
}
// .tabOneContent {}
.el-descriptions-item__label {
background: #F5F8FA;
width: 220px;
font-family: PingFang-SC, PingFang-SC;
font-weight: 500;
font-size: 14px;
color: #333333;
}
.el-descriptions-item__content {
font-family: PingFang-SC, PingFang-SC;
font-weight: 500;
font-size: 14px;
color: #333333;
}
.project-info-title {
margin-bottom: 28px;
font-family: PingFang-SC, PingFang-SC;
font-weight: bold;
font-size: 14px;
color: #333333;
}
}
}
//
.projectInfo-memo {
width: 100%;
.memo-top {
width: 100%;
// margin-bottom: 15px;
.project-info-top {
display: flex;
align-items: center;
.project-info {
font-family: PingFang-SC, PingFang-SC;
font-weight: bold;
font-size: 14px;
color: #333333;
margin-right: 60px;
}
}
.el-date-editor {
width: 340px;
}
.el-input {
width: 340px;
}
.query-item {
margin-left: 15px;
.el-form-item__content {
width: 100%;
button {
height: 32px;
}
}
}
}
.memo-bottom {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-gap: 15px;
height: 400px;
width: 100%;
overflow-y: auto;
.el-card {
overflow: visible;
}
.el-card__header {
background-color: #F5F8FA;
border-bottom: 1px solid #D9D9D9;
.clearfix {
display: flex;
align-items: center;
.clearfix-left {
flex: 1;
display: flex;
flex-direction: column;
span {
&:nth-of-type(1) {
font-family: PingFang-SC, PingFang-SC;
font-weight: bold;
font-size: 14px;
color: #333333;
}
&:nth-of-type(2) {
font-family: PingFang-SC, PingFang-SC;
font-weight: 500;
font-size: 12px;
color: #737373;
margin-top: 15px;
}
}
}
.clearfix-right {
display: flex;
.clearfix-bianji,.clearfix-shanchu {
display: flex;
align-items: center;
padding: 5px 15px;
cursor: pointer;
// border-radius: 15px;
border-radius: 50px;
i {
margin-right: 5px;
}
}
.clearfix-bianji {
background: rgba(24,144,255,0.3);
}
.clearfix-shanchu {
background: rgba(243,110,65,0.3);
margin-left: 10px;
}
}
}
}
.clearfix-body {
.memo-keyword {
padding: 20px 15px 10px 15px;
border-bottom: 1px solid #D9D9D9;
.memo-keyword-title {
font-family: PingFang-SC, PingFang-SC;
font-weight: bold;
font-size: 14px;
color: #333333;
}
.memo-keyword-content {
font-family: PingFang-SC, PingFang-SC;
font-weight: 500;
font-size: 12px;
color: #737373;
margin-top: 10px;
height: 80px;
overflow-y: auto;
}
}
.memo-content {
padding: 20px 15px 10px 15px;
.memo-content-title {
font-family: PingFang-SC, PingFang-SC;
font-weight: bold;
font-size: 14px;
color: #333333;
}
.memo-content-content {
font-family: PingFang-SC, PingFang-SC;
font-weight: 500;
font-size: 12px;
color: #737373;
margin-top: 10px;
height: 80px;
overflow-y: auto;
}
}
}
}
}
//
.money-schedule {
.schedule-title {
font-family: PingFang-SC, PingFang-SC;
font-weight: bold;
font-size: 14px;
color: #333333;
}
.schedule-timeline {
margin-top: 48px;
.el-timeline-item__tail {
border: 1px dashed #dfe4ed;
}
.el-timeline-item__wrapper {
top: -20px;
}
.el-card__body {
background-color: #F5F8FA;
padding: 15px;
.schedule-content {
display: flex;
align-items: center;
.schedule-card-title {
font-family: PingFang-SC, PingFang-SC;
font-weight: bold;
font-size: 14px;
color: #333333;
}
.schedule-status {
margin-left: 20px;
padding: 5px 7px;
border-radius: 2px 2px 2px 2px;
font-family: PingFang-SC, PingFang-SC;
font-weight: bold;
font-size: 12px;
color: #FFFFFF;
cursor: pointer;
}
.orange {
background: #F39801;
}
.green {
background: #24D3A9;
}
.blue {
background: #134EE6;
}
}
.schedule-time {
font-family: PingFang-SC, PingFang-SC;
font-weight: 500;
font-size: 12px;
color: #737373;
margin-top: 15px;
}
}
}
}
//
.L-projectProgress {
width: 100%;
height: 100%;
background-color: #fff;
padding: 27px 24px 0 27px;
.projectProgress-title {
font-family: PingFang-SC, PingFang-SC;
font-weight: bold;
font-size: 14px;
color: #333333;
margin-bottom: 47px;
}
.schedule-timeline {
.el-timeline {
padding-left: 0;
.timeline-item-green {
.el-timeline-item__tail {
border: 1px solid #4EB997;
}
}
.timeline-item-red {
.el-timeline-item__tail {
border: 1px solid #ff1818;
}
}
}
.timeline-dot {
position: absolute;
left: -5px;
width: 22px;
height: 22px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
background-color: #fff;
box-shadow: 1px 1px 3px 0px #4EB997;
.icon-jc-dian {
color: #ff1818;
}
.icon-jc-dian-green {
color: #4EB997;
}
}
.timeline-dot-red {
box-shadow: 1px 1px 3px 0px #ff1818;
}
.el-timeline-item__wrapper {
top: -20px;
}
.el-card__body {
background-color: #F5F8FA;
padding: 15px;
.schedule-content {
display: flex;
align-items: center;
.card-content-left {
flex: 1;
.schedule-card-title {
font-family: PingFang-SC, PingFang-SC;
font-weight: bold;
font-size: 14px;
color: #333333;
}
.card-content-one,.card-content-two {
margin-top: 10px;
span {
font-family: PingFang-SC, PingFang-SC;
font-weight: 500;
font-size: 12px;
&:nth-of-type(1) {
color: #737373;
width: 70px;
display: inline-block;
}
&:nth-of-type(2) {
color: #333333;
}
}
}
.card-content-three {
margin-top: 20px;
font-family: PingFang-SC, PingFang-SC;
font-weight: 500;
font-size: 12px;
color: #737373;
}
}
.card-content-right {
.iconfont {
font-size: 65px;
}
.icon-jc-shenpitongguo-copy {
color: #4EB997;
}
}
}
.schedule-time {
font-family: PingFang-SC, PingFang-SC;
font-weight: 500;
font-size: 12px;
color: #737373;
margin-top: 15px;
}
}
}
}
}
//
.importFormItem {
.el-form-item__label {
text-align: left;
}
.el-form-item__content {
.el-select,.el-date-editor {
width: 280px;
}
.btnsFlex {
display: flex;
align-items: center;
.el-upload {
// .el-upload-dragger {
display: flex;
align-items: center;
justify-content: center;
width: 120px;
height: 36px;
background: #F1D78C;
border: none;
border-radius: 5px 5px 5px 5px;
font-family: PingFang-SC, PingFang-SC;
font-weight: bold;
font-size: 14px;
color: #000000;
i {
margin-right: 5px;
}
// }
// .el-upload-dragger:hover {
// background: oklab(.88 0 .1 / .5);
// border-color: #f1d78c;
// // border: 1px solid #f1d78c;
// color: #000;
// }
}
.el-upload:hover {
background: oklab(.88 0 .1 / .5);
border-color: #f1d78c;
// border: 1px solid #f1d78c;
color: #000;
}
a {
text-decoration: underline;
color: #134EE6;
margin-left: 20px;
}
}
}
}
.importExplain {
.importExplain-title {
font-family: PingFang-SC, PingFang-SC;
font-weight: bold;
font-size: 14px;
color: #666666;
}
.importExplain-content {
margin: 10px 0;
span {
font-family: PingFang-SC, PingFang-SC;
font-weight: 500;
font-size: 12px;
color: #666666;
}
}
.importExplain-table {
table {
border-collapse: collapse;
width: 100%;
}
th, td {
border: 1px solid #cccccc;
width: 80px;
height: 37px;
text-align: center;
}
th {
background-color: #F6F9FD;
}
}
}
//
.memoDialog {
.el-form-item__content {
.el-textarea {
textarea {
font-family: PingFang-SC, PingFang-SC;
font-weight: 500;
font-size: 14px;
color: #333333;
&::placeholder {
color: #cccccc;
}
}
}
}
}

@ -4,22 +4,25 @@
* @Author: JC9527
* @Date: 2024-03-25 09:07:08
* @LastEditors: JC9527
* @LastEditTime: 2024-03-25 14:39:13
* @LastEditTime: 2024-03-27 17:19:32
-->
<template>
<el-breadcrumb class="app-breadcrumb" separator="/">
<transition-group name="breadcrumb">
<el-breadcrumb-item v-for="(item, index) in levelList" :key="item.path">
<span
v-if="item.redirect === 'noRedirect' || index == levelList.length - 1"
class="no-redirect"
:class="index == levelList.length - 1 ? 'lastItem' : ''"
>{{ item.meta.title }}</span
>
<a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
</el-breadcrumb-item>
</transition-group>
</el-breadcrumb>
<div class="my-L-breadcrumb">
<el-breadcrumb class="app-breadcrumb" separator="/">
<transition-group name="breadcrumb">
<el-breadcrumb-item v-for="(item, index) in levelList" :key="item.path">
<span
v-if="item.redirect === 'noRedirect' || index == levelList.length - 1"
class="no-redirect"
:class="index == levelList.length - 1 ? 'lastItem' : ''"
>{{ item.meta.title }}</span
>
<a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
</el-breadcrumb-item>
</transition-group>
</el-breadcrumb>
<i class="icon iconfont icon-jc-55fanhui" @click="back" v-show="$route.meta.title == '项目详情'"></i>
</div>
</template>
<script>
@ -35,7 +38,6 @@ export default {
if (route.path.startsWith("/redirect/")) {
return;
}
console.log(route);
this.getBreadcrumb();
},
},
@ -53,7 +55,6 @@ export default {
// if (!this.isDashboard(first)) {
// matched = [{ path: "/index", meta: { title: "" } }].concat(matched);
// }
console.log(matched,"matched");
this.levelList = matched.filter(
(item) => item.meta && item.meta.title && item.meta.title != '项目列表' && item.meta.breadcrumb !== false
);
@ -73,6 +74,10 @@ export default {
}
this.$router.push(path);
},
//
back(){
this.$router.replace({path: '/project/index'})
},
},
};
</script>

@ -30,7 +30,6 @@ router.beforeEach((to, from, next) => {
isRelogin.show = false;
store.dispatch("GenerateRoutes").then((accessRoutes) => {
// 根据roles权限生成可访问的路由表
console.log(accessRoutes, "路由");
router.addRoutes(accessRoutes); // 动态添加可访问路由表
next({ ...to, replace: true }); // hack方法 确保addRoutes已完成
});

@ -0,0 +1,13 @@
export function getKey(object){
let isEmpty = false
Object.keys(object).forEach(el => {
if (object[el] !== null && object[el] !== '') {
isEmpty = true
}
})
if(isEmpty){ return true } else { return false }
}
export function clearKey(object){
Object.keys(object).forEach(key=>{object[key]=''})
}

@ -24,10 +24,10 @@
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
<div class="pagination-right">
<!-- <div class="pagination-right">
<div class="pagination-inputNumber">到第<el-input-number v-model="num" :controls="false" @change="handleChange" :min="1" :max="Math.ceil(total)"></el-input-number></div>
<div class="pagination-confirm" :class="num ? 'pagination-cconfirm-two': ''"></div>
</div>
<div class="pagination-confirm" :class="num ? 'pagination-cconfirm-two': ''" @click="handleConfirm"></div>
</div> -->
</div>
</template>
@ -56,7 +56,7 @@ export default {
},
layout: {
type: String,
default: 'prev, pager, next'
default: 'prev, pager, next, jumper'
},
background: {
type: Boolean,
@ -142,7 +142,9 @@ export default {
scrollTo(0, 800)
}
},
handleChange(){},
// handleChange(val){
// this.$emit('pagination', { page: val, limit: this.pageSize })
// },
}
}

@ -0,0 +1,88 @@
<template>
<el-dialog
:title="title"
:visible.sync="dialogFormVisible"
:close-on-click-modal="false"
:close-on-press-escape="false"
:custom-class="myclass ? 'custom-my-class':''"
@close="resetCancel"
>
<slot></slot>
<div slot="footer" class="dialog-footer">
<el-form size="small">
<el-form-item class="dialog-from-item">
<el-button size="mini" @click="resetCancel"></el-button>
<el-button type="primary" size="mini" @click="resetConfirm"></el-button>
</el-form-item>
</el-form>
</div>
</el-dialog>
</template>
<script>
export default {
data() {
return {
dialogFormVisible: false,
}
},
props:{
title:{
type:String,
default:''
},
myclass:{
type:Boolean,
default:false,
}
},
methods:{
open(){
this.dialogFormVisible = true
},
close(){
this.dialogFormVisible = false;
},
//
resetCancel(){
this.$emit('close')
},
//
resetConfirm(){
this.$emit('confirm')
},
},
}
</script>
<style lang="scss" scoped>
::v-deep .el-dialog {
margin-top: 25vh !important;
border-radius: 5px;
.el-dialog__header {
border-bottom: 1px solid #DDDDDD;
span {
font-family: PingFang-SC, PingFang-SC;
font-weight: 800;
font-size: 16px;
color: #000000;
}
}
.el-dialog__footer {
border-top: 1px solid #DDDDDD;
.dialog-footer {
.el-form {
.dialog-from-item {
margin-bottom: 0;
.el-form-item__content {
.el-button {
padding: 10px 17px;
}
}
}
}
}
}
}
::v-deep .custom-my-class {
margin-top: 15vh !important;
}
</style>

@ -4,7 +4,7 @@
* @Author: JC9527
* @Date: 2024-03-25 09:07:08
* @LastEditors: JC9527
* @LastEditTime: 2024-03-25 14:18:03
* @LastEditTime: 2024-03-28 10:20:30
-->
<template>
<div class="L-public-main">
@ -13,24 +13,26 @@
<el-form :inline="true" :model="formInline" size="small" class="demo-form-inline" ref="queryFrom">
<el-col :span="22">
<el-form-item label="项目分类:">
<el-select v-model="formInline.type" placeholder="请选择">
<el-select v-model="formInline.projectClassify" placeholder="请选择">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
v-for="dict in dict.type.jjh_project_type"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="项目名称:">
<el-input v-model="formInline.name" placeholder="请输入内容"></el-input>
<el-input v-model="formInline.projectName" placeholder="请输入内容"></el-input>
</el-form-item>
<el-form-item label="申报单位:">
<el-input v-model="formInline.unit" placeholder="请输入内容"></el-input>
<el-input v-model="formInline.declareUnit" placeholder="请输入内容"></el-input>
</el-form-item>
<el-form-item label="年份:">
<el-date-picker
v-model="formInline.year"
v-model="formInline.projectYear"
format="yyyy"
value-format="yyyy"
type="year"
placeholder="选择年">
</el-date-picker>
@ -47,16 +49,20 @@
</el-form-item>
</el-col>
<el-col :span="2">
<el-button type="primary" class="import-btn" size="mini"><img class="btn-img" src="@/assets/images/project/toLead.png"></img>导入新项目</el-button>
<el-button type="primary" class="import-btn" icon="icon iconfont icon-jc-daoru" size="mini" @click="importBtn"></el-button>
</el-col>
</el-form>
</header>
<el-table v-loading="loading" :data="userList" :row-class-name="tableRowClassName">
<el-table-column label="项目名称" key="name" width="600px" prop="name" />
<el-table-column label="申报单位" key="unit" width="300px" prop="unit" />
<el-table-column label="项目分类" key="type" width="200px" prop="type" />
<el-table-column label="年份" key="year" prop="year" />
<el-table-column label="状态" key="status" prop="status" class-name="table-status">
<el-table v-loading="loading" :data="tableData" :row-class-name="tableRowClassName">
<el-table-column label="项目名称" key="projectName" width="550px" prop="projectName" />
<el-table-column label="申报单位" key="declareUnit" width="350px" prop="declareUnit" />
<el-table-column label="项目分类" key="projectClassify" width="350px" prop="projectClassify">
<template slot-scope="scope">
<dict-tag :options="dict.type.jjh_project_type" :value="scope.row.projectClassify"/>
</template>
</el-table-column>
<el-table-column label="年份" key="projectYear" width="200px" prop="projectYear" />
<el-table-column label="状态" key="status" width="200px" prop="status" class-name="table-status">
<template slot-scope="scope">
<p class="statusisTwo" v-if="scope.row.status === 2">
<span></span>
@ -79,22 +85,127 @@
</template>
</el-table-column>
</el-table>
<my-pagination :total="60"></my-pagination>
<my-pagination
:total="total"
:page="pagination.current"
:limit="pagination.size"
@pagination="getPagination"
:current-page.sync="pagination.current"
></my-pagination>
</div>
<my-dialog :title="title" @close="importClose" ref="importProject">
<el-row>
<el-col :span="12">
<el-form :model="importFrom" size="small" ref="importFrom" label-width="100px" :rules="rules">
<el-form-item label="项目分类:" class="importFormItem" prop="projectClassify">
<el-select v-model="importFrom.projectClassify" placeholder="请选择">
<el-option
v-for="dict in dict.type.jjh_project_type"
:key="dict.value"
:label="dict.label"
:value="dict.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="年份:" class="importFormItem" prop="projectYear">
<el-date-picker
v-model="importFrom.projectYear"
type="year"
format="yyyy"
value-format="yyyy"
placeholder="选择年">
</el-date-picker>
</el-form-item>
<el-form-item class="importFormItem">
<!-- <el-button type="primary" class="import-btn" icon="icon iconfont icon-jc-daoru" size="mini" @click="importBtn"></el-button> -->
<div class="btnsFlex">
<el-button type="primary" class="import-btn" icon="icon iconfont icon-jc-daoru" size="mini" @click="importExcel"></el-button>
<el-upload
ref="upload"
:limit="1"
v-show="false"
accept=".xlsx, .xls"
:data="importFrom"
:headers="upload.headers"
:action="upload.url"
:disabled="upload.isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
>
<template slot="trigger">
<!-- <div ref="uploadRef">
<i class="icon iconfont icon-jc-daoru"></i>
导入新项目
</div> -->
<el-button type="primary" class="import-btn" icon="icon iconfont icon-jc-daoru" size="mini" ref="uploadRef">导入新项目</el-button>
</template>
</el-upload>
<a @click="importTemplate"></a>
</div>
</el-form-item>
</el-form>
</el-col>
<el-col :span="12">
<div class="importExplain">
<div class="importExplain-title">导入模板说明</div>
<div class="importExplain-content">
<span>"项目名称 项目分类 申报单位 年份"</span>
<span>以上字段为excel公共字段后面的字段可自定义系统会自动识别并导入</span>
</div>
<div class="importExplain-table">
<table>
<tr>
<th>项目名称</th>
<th>项目分类</th>
<th>申报单位</th>
<th>年份</th>
<th></th>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
</div>
</div>
</el-col>
</el-row>
</my-dialog>
</div>
</template>
<script>
import myPagination from "@/views/components/Pagination/index.vue"
import myDialog from "@/views/components/myDialog/index.vue"
import { getToken } from "@/utils/auth";
import { clearKey } from "@/utils/object.js"
import { jProject, jProjectDel } from "@/api/jin_ji_hu/project/index"
export default {
components:{myPagination},
components:{myPagination,myDialog},
dicts: ['jjh_project_type'],
data() {
return {
total:0,
pagination: {
current:1,
size:10,
},
formInline: {
type: '',
name:"",
unit:"",
year:"",
projectClassify: '',
projectName:"",
declareUnit:"",
projectYear:"",
status: ''
},
options:[
@ -116,63 +227,155 @@ export default {
},
],
loading:false,
userList:[
{
name: "全方位生物大分子药定制研发生产CDMO服务平台",
unit: "苏桥生物(苏州)有限公司",
type: "总部经济",
year: "2024",
status: 2,
},{
name: "全方位生物大分子药定制研发生产CDMO服务平台",
unit: "苏桥生物(苏州)有限公司",
type: "总部经济",
year: "2024",
status: 1,
},{
name: "全方位生物大分子药定制研发生产CDMO服务平台",
unit: "苏桥生物(苏州)有限公司",
type: "总部经济",
year: "2024",
status: 0,
},{
name: "全方位生物大分子药定制研发生产CDMO服务平台",
unit: "苏桥生物(苏州)有限公司",
type: "总部经济",
year: "2024",
status: 0,
},{
name: "全方位生物大分子药定制研发生产CDMO服务平台",
unit: "苏桥生物(苏州)有限公司",
type: "总部经济",
year: "2024",
status: 2,
},
]
tableData:[],
title:"导入新项目",
importFrom:{
projectClassify:"",
projectYear:"",
},
rules: {
projectClassify: [
{ required: true, message: '请选择项目分类', trigger: 'change' }
],
projectYear: [
{ required: true, message: '请选择年份', trigger: 'change' }
],
},
//
upload: {
//
isUploading: false,
//
updateSupport: 0,
//
headers: { Authorization: "Bearer " + getToken() },
//
// url: process.env.VUE_APP_BASE_API + "/jjh/jProject/export"
url: process.env.VUE_APP_BASE_API + "/jjh/jProject/importTemplateProject"
},
};
},
mounted() {
if(this.$route.query.projectId) {
this.formInline.projectClassify = this.$route.query.projectId;
this.pagination = { ...this.pagination,...this.formInline };
}
this.getList();
},
methods:{
//
routers() {
return this.$store.state.permission.topbarRouters;
//
getList(){
this.loading = true;
jProject(this.pagination).then(res=>{
this.loading = false;
this.total = res.data.total;
this.tableData = res.data.records;
})
},
//
getPagination(pages) {
this.pagination.current = pages.page;
this.pagination.size = pages.limit;
this.getList();
},
//
handleQuery() {
console.log(this.formInline,'submit!');
this.pagination = {
current: 1,
size: 10
}
this.pagination = { ...this.pagination,...this.formInline };
// console.log(this.pagination);
console.log(this.formInline);
this.getList();
},
//
resetQuery(refName){
resetQuery(){
this.pagination = {
current: 1,
size: 10
}
clearKey(this.formInline)
this.getList();
},
//
importBtn(){
this.$refs.importProject.open();
},
//
importClose(){
this.$refs.importProject.close();
this.$nextTick(()=>{
this.$refs.importFrom.resetFields();
})
},
//
importExcel(){
this.$refs.importFrom.validate((valid) => {
if (valid) {
// this.$refs.uploadRef.click()
this.$refs['upload'].$refs['upload-inner'].handleClick()
} else {
console.log('error submit!!');
return false;
}
});
},
/** 下载模板操作 */
importTemplate() {
this.download('/jjh/jProject/updateProjectTemplate', {
}, `项目模板${new Date().getTime()}.xlsx`)
},
//
handleFileUploadProgress(event, file, fileList) {
// this.upload.isUploading = true;
},
//
handleFileSuccess(response, file, fileList) {
// this.upload.isUploading = false;
this.$refs.upload.clearFiles();
this.$alert(
"<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
response.msg +
"</div>",
"导入结果",
{ dangerouslyUseHTMLString: true }
);
this.importClose();
this.$refs.importProject.close();
// this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "", { dangerouslyUseHTMLString: true });
this.getList();
},
//
goInfo(rwo){
const router = this.routers()
this.$router.push({
path: '/project/projectInfo',
query: { userId: rwo.id }
})
},
//
delInfo(row){},
delInfo(row){
this.$confirm("此操作将永久删除该数据, 是否继续?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
jProjectDel({ id: row.id }).then((res) => {
this.getList();
this.$message({
type: "success",
message: "删除成功!",
});
});
})
.catch(() => {
this.$message({
type: "info",
message: "已取消删除",
});
});
},
// table
tableRowClassName({row, rowIndex}){
if (rowIndex % 2 !== 0) {

@ -0,0 +1,5 @@
export { default as tabOne } from './tabOne'
export { default as tabTwo } from './tabTwo'
export { default as tabThree } from './tabThree'
export { default as tabFour } from './tabFour'
export { default as projectProgress } from './projectProgress'

@ -0,0 +1,58 @@
<template>
<div class="L-projectProgress">
<div class="projectProgress-title">项目进展</div>
<div class="schedule-timeline">
<el-timeline>
<el-timeline-item
v-for="(activity, index) in activities"
:key="index"
size="large"
:class="activity.status == 1 || activity.status == 0 ? 'timeline-item-green' : activity.status == 2 ? 'timeline-item-red' : ''"
>
<div slot="dot" class="timeline-dot" :class="activity.status == 2 ? 'timeline-dot-red' : ''">
<i class="icon iconfont" :class="activity.status == 1 || activity.status == 0 ? 'icon-jc-dian-green' : activity.status == 2 ? 'icon-jc-dian' : ''"></i>
</div>
<el-card> <!-- 去除阴影 shadow="never -->
<div class="schedule-content">
<div class="card-content-left">
<div class="schedule-card-title">提交项目材料</div>
<div class="card-content-one">
<span>提醒</span>
<span>已提交xxx材料</span>
</div>
<div class="card-content-two">
<span>附件</span>
<span>xxx.doc</span>
</div>
<div class="card-content-three">2023-05-11</div>
</div>
<div class="card-content-right" v-if="activity.status !== 0">
<i class="icon iconfont" :class="activity.status == 2 ? 'icon-jc-daishenpi1-copy' : activity.status == 1 ? 'icon-jc-shenpitongguo-copy' : ''"></i>
</div>
</div>
</el-card>
</el-timeline-item>
</el-timeline>
</div>
</div>
</template>
<script>
export default {
data() {
return {
activities: [{
status: 2,
}, {
status: 1,
}, {
status: 1,
}, {
status: 0,
}]
}
},
methods:{
},
}
</script>

@ -0,0 +1,275 @@
<template>
<div class="projectInfo-memo">
<div class="memo-top">
<el-row>
<el-form :inline="true" :model="formInline" size="small" ref="queryFrom">
<el-col :span="9">
<div class="project-info-top">
<div class="project-info">备忘录</div>
<el-button type="primary" icon="icon iconfont icon-jc-xinjian" size="mini" @click="newMemo"></el-button>
</div>
</el-col>
<el-col :span="15">
<el-form-item>
<!-- <el-date-picker
v-model="formInline.time"
type="datetime"
placeholder="选择备忘时间">
</el-date-picker> -->
<el-date-picker
v-model="memoTime"
format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss"
type="datetimerange"
range-separator="至"
start-placeholder="开始时间"
end-placeholder="结束时间">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-input v-model="formInline.name" placeholder="请输入用户名、主题/关键字, 查询项目备忘"></el-input>
</el-form-item>
<el-form-item class="query-item">
<el-button size="mini" @click="resetQuery('queryFrom')"></el-button>
<el-button size="mini" type="primary" @click="handleQuery('queryFrom')"></el-button>
</el-form-item>
</el-col>
</el-form>
</el-row>
</div>
<div class="memo-bottom" v-loading="loading">
<el-card :body-style="{ padding: '0px' }" v-for="(item,index) in memoList" :key="index"> <!-- shadow="never -->
<div slot="header" class="clearfix">
<div class="clearfix-left">
<span>{{ item.name }}</span>
<span>{{ item.createTime }}</span>
</div>
<div class="clearfix-right">
<div class="clearfix-bianji" @click="putMemo(item)">
<i class="icon iconfont icon-jc-bianji-copy"></i>
编辑
</div>
<div class="clearfix-shanchu" @click="delMemo(item)">
<i class="icon iconfont icon-jc-shanchu-select"></i>
删除
</div>
</div>
</div>
<div class="clearfix-body">
<div class="memo-keyword">
<div class="memo-keyword-title">主题/关键字</div>
<div class="memo-keyword-content">
{{ item.keywords }}
</div>
</div>
<div class="memo-content">
<div class="memo-content-title">
备忘内容
</div>
<div class="memo-content-content">
{{ item.content }}
</div>
</div>
</div>
</el-card>
</div>
<my-dialog :title="title" @close="memoClose" @confirm="confirm" :myclass="true" ref="newMemoRef">
<div class="memoDialog">
<el-form :model="memoData" size="small" ref="memoFrom" label-width="120px">
<el-form-item label="姓名" prop="name">
<el-input v-model="memoData.name" placeholder="请输入内容" disabled></el-input>
</el-form-item>
<el-form-item label="备忘时间" prop="createTime">
<el-date-picker
disabled
v-model="memoData.createTime"
format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss"
type="datetime"
placeholder="选择备忘时间">
</el-date-picker>
</el-form-item>
<el-form-item label="主题/关键字" prop="keywords">
<el-input
type="textarea"
resize="none"
:rows="3"
placeholder="请输入主题/关键字"
v-model="memoData.keywords">
</el-input>
</el-form-item>
<el-form-item label="备忘内容" prop="content">
<el-input
type="textarea"
resize="none"
:rows="3"
placeholder="请输入备忘内容"
v-model="memoData.content">
</el-input>
</el-form-item>
</el-form>
</div>
</my-dialog>
</div>
</template>
<script>
import { getJMemorandumList, getJMemorandumId, postJMemorandum, putJMemorandum, delJMemorandum } from "@/api/jin_ji_hu/project/index"
import myDialog from "@/views/components/myDialog/index.vue"
export default {
components:{
myDialog
},
name:"tabFour",
data() {
return {
formInline:{
startTime:"",
endTime:"",
name:"",
projectId:undefined,
},
memoTime:[],
title:"新增备忘录",
memoData:{
name: "",
createTime: "",
keywords: "",
content: "",
projectId:undefined,
},
memoList:[],
loading:false,
}
},
props:{
id:{
type:String,
default:"",
}
},
mounted(){
this.formInline.projectId = Number(this.id);
this.memoData.projectId = Number(this.id);
this.getList();
},
methods:{
//
resetQuery(){
this.formInline = {
startTime:"",
endTime:"",
name:"",
projectId:this.id,
}
this.memoTime = [];
this.getList();
},
//
handleQuery(){
this.formInline.startTime = this.memoTime[0];
this.formInline.endTime = this.memoTime[1];
this.getList();
},
//
newMemo(){
this.title = "新建备忘录";
this.memoData = {
name: "",
createTime: "",
keywords: "",
content: "",
projectId:undefined,
}
this.$refs.newMemoRef.open();
this.memoData.projectId = Number(this.id);
this.memoData.name = this.$store.getters.name;
this.memoData.createTime = this.getDate();
},
//
getList() {
this.loading = true;
getJMemorandumList(this.formInline).then(res=>{
// console.log(res,"");
this.memoList = res.data;
this.loading = false;
})
},
//
memoClose(){
// console.log("");
// this.clearKey(this.memoData)
this.$nextTick(()=>{
this.$refs.memoFrom.resetFields();
this.$refs.newMemoRef.close();
})
},
confirm(){
if(this.memoData.id) {
putJMemorandum(this.memoData).then(res=>{
if(res.code == 200) {
this.memoClose();
this.getList();
this.$message({
type: "success",
message: "修改成功!",
});
}
})
} else {
postJMemorandum(this.memoData).then(res=>{
if(res.code == 200) {
this.memoClose();
this.getList();
this.$message({
type: "success",
message: "新增成功!",
});
}
})
}
},
//
putMemo(row){
this.title = "编辑备忘录";
this.$refs.newMemoRef.open();
getJMemorandumId(row.id).then(res=>{
this.memoData = res.data;
})
},
//
delMemo(row){
this.$confirm("此操作将永久删除该数据, 是否继续?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
delJMemorandum({ id: row.id }).then((res) => {
this.getList();
this.$message({
type: "success",
message: "删除成功!",
});
});
})
.catch(() => {
this.$message({
type: "info",
message: "已取消删除",
});
});
},
//
getDate(){
const date = new Date();
var year = date.getFullYear(); //
var month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1; // 0 1
var day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate(); //
var hours = date.getHours(); //
var minutes = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes(); //
var seconds = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds(); //
return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
},
},
}
</script>

@ -0,0 +1,100 @@
<!--
* @Descripttion:
* @version:
* @Author: JC9527
* @Date: 2024-03-25 15:37:35
* @LastEditors: JC9527
* @LastEditTime: 2024-03-27 17:22:13
-->
<template>
<div>
<div class="project-info-title">申报企业信息</div>
<el-descriptions class="margin-top" :column="3" size="medium" border v-loading="loading">
<el-descriptions-item labelClassName="tabOneLabel" contentClassName="tabOneContent"
v-for="(item,index) in info"
:key="index"
:label="item.key"
:span="item.span"
>
{{ item.value }}
</el-descriptions-item>
</el-descriptions>
</div>
</template>
<script>
export default {
name:"tabOne",
props:{
detailedInfo:{
type:Object,
default:()=>{
return {};
}
}
},
watch: {
detailedInfo: {
handler(newInfo){
this.loading = true;
if(newInfo) {
this.loading = false;
let arr = []
for (var key in newInfo) {
if (newInfo.hasOwnProperty(key)) {
let obj = {};
obj["key"] = key;
obj["value"] = newInfo[key]
obj["span"] = 1;
arr.push(obj)
}
}
for (var i = 0; i < arr.length; i++) {
//
if(arr[i].value) {
if((i + 1) % 3 == 1 && arr[i].value.length > 50) {
arr[i].span = 3
} else if((i + 1) % 3 == 1 && arr[i].value.length > 18 && arr[i].value.length < 50 ) {
arr[i - 1].span = 3
arr[i].span = 2
} else if((i + 1) % 3 == 2 && arr[i].value.length > 50) {
arr[i - 1].span = 3
arr[i].span = 3
} else if((i + 1) % 3 == 2 && arr[i].value.length > 18 && arr[i].value.length < 50) {
arr[i].span = 2
} else if((i + 1) % 3 == 0 && arr[i].value.length > 18 && arr[i].value.length < 50 && arr[i - 1].span == 1) {
arr[i - 1].span = 2
arr[i].span = 2
} else if((i + 1) % 3 == 0 && arr[i].value.length > 50 && arr[i - 1].span == 1) {
arr[i - 1].span = 2
arr[i].span = 3
} else if((i + 1) % 3 == 0 && arr[i].value.length > 18 && arr[i].value.length < 50 && arr[i - 1].span == 2) {
arr[i].span = 2
}
} else {
arr[i].span = 1
}
}
this.info = [...arr]
}
},
immediate:true,
deep:true
},
},
data() {
return {
info:[],
loading:false,
}
},
mounted() {
// console.log(this.info,"tabOne");
// this.loading = true;
},
methods:{
},
}
</script>

@ -0,0 +1,50 @@
<template>
<div class="money-schedule">
<div class="schedule-title">资金拨付进度</div>
<div class="schedule-timeline">
<el-timeline>
<el-timeline-item
v-for="(activity, index) in activities"
:key="index"
:icon="activity.icon"
:type="activity.type"
:size="activity.size"
>
<el-card> <!-- 去除阴影 shadow="never -->
<div class="schedule-content">
<div class="schedule-card-title">xxxx年xx月xx日 政府财务审核通过</div>
<div class="schedule-status" :class="activity.status == 0 ? 'orange' : activity.status == 1 ? 'green' : activity.status == 2 ? 'blue' : ''">
{{ activity.status == 0 ? '已提交' : activity.status == 1 ? '审核通过' : activity.status == 2 ? '已拨付' : '' }}
</div>
</div>
<div class="schedule-time">2023-05-11</div>
</el-card>
</el-timeline-item>
</el-timeline>
</div>
</div>
</template>
<script>
export default {
name:"tabThree",
data() {
return {
activities: [{
size: 'large',
icon: 'icon iconfont icon-jc-kong-yuan',
status: 2,
}, {
icon: 'icon iconfont icon-jc-kong-yuan',
size: 'large',
status: 1,
}, {
size: 'large',
icon: 'icon iconfont icon-jc-kong-yuan',
status: 0,
}]
}
},
methods:{
},
}
</script>

@ -0,0 +1,32 @@
<template>
<div>
<div class="project-info-title">申报企业信息</div>
<el-descriptions class="margin-top" :column="3" size="medium" border>
<el-descriptions-item label="申报类型">投资补助</el-descriptions-item>
<el-descriptions-item label="申报企业名称">新增</el-descriptions-item>
<el-descriptions-item label="企业性质">内资民营</el-descriptions-item>
<el-descriptions-item label="统一社会信用代码">QRDVCDS1321412FDSFDS</el-descriptions-item>
<el-descriptions-item label="邮编">215513</el-descriptions-item>
<el-descriptions-item label="电话">0512-6782727</el-descriptions-item>
<el-descriptions-item label="企业注册地">江苏-苏州-工业园区</el-descriptions-item>
<el-descriptions-item label="企业资本" :span="2">4000万元</el-descriptions-item>
<el-descriptions-item label="企业责任人(法人代表)姓名">张珊</el-descriptions-item>
<el-descriptions-item label="项目联系人 姓名">万林</el-descriptions-item>
<el-descriptions-item label="项目联系人 姓名">赵文</el-descriptions-item>
<el-descriptions-item label="电话">18012345432</el-descriptions-item>
<el-descriptions-item label="电话">18023494876</el-descriptions-item>
<el-descriptions-item label="电话">18743870987</el-descriptions-item>
</el-descriptions>
</div>
</template>
<script>
export default {
name:"tabTwo",
data() {
return {
}
},
methods:{
},
}
</script>

@ -1,13 +1,90 @@
<template>
<h1>详情</h1>
<div class="L-public-main projectInfo">
<el-row :gutter="10">
<el-col :span="18">
<div class="left-info">
<div class="project-info-title">申报企业信息</div>
<el-descriptions class="margin-top" :column="2" size="medium" border v-loading="loading">
<el-descriptions-item label="项目名称">{{ info.projectName }}</el-descriptions-item>
<el-descriptions-item label="项目分类" contentClassName="info-link"><a class="a-primary" @click="goback(info.projectClassify)"><dict-tag :options="dict.type.jjh_project_type" :value="info.projectClassify"/></a></el-descriptions-item>
<el-descriptions-item label="申报单位" contentClassName="info-link">{{ info.declareUnit }}<a v-show="info.declareUnit"></a></el-descriptions-item>
<el-descriptions-item label="年份">{{ info.projectYear }}</el-descriptions-item>
</el-descriptions>
</div>
<div class="left-tabs">
<div class="tabs-top">
<div v-for="(item,index) in tabs" :key="index" class="tabs-top-item" :class="active == index ? 'active-item' : ''" @click="active = index">{{ item.name }}</div>
</div>
<div class="tabs-bottom">
<tab-one v-if="active == 0" :detailedInfo="detailedInfo"></tab-one>
<tab-two v-if="active == 1"></tab-two>
<tab-three v-if="active == 2"></tab-three>
<tab-four v-if="active == 3" :id="$route.query.userId"></tab-four>
</div>
</div>
</el-col>
<el-col :span="6">
<project-progress></project-progress>
</el-col>
</el-row>
</div>
</template>
<script>
import { tabOne, tabTwo, tabThree, tabFour, projectProgress } from "./components"
import { jProjectId } from "@/api/jin_ji_hu/project/index"
export default {
dicts: ['jjh_project_type'],
components:{
tabOne,
tabTwo,
tabThree,
tabFour,
projectProgress
},
data() {
return {
tabs:[
{
name: "项目详细信息",
},{
name: "申报单位信息",
},{
name: "资金拨付进度",
},{
name: "备忘录",
},
],
active: 0,
info:{},
detailedInfo:{},
loading:false,
}
},
mounted(){
this.getInfo(this.$route.query.userId)
},
methods:{
getInfo(id){
this.loading = true;
jProjectId(id).then(res=>{
this.info = res.data;
this.loading = false;
this.detailedInfo = JSON.parse(res.data.otherJson);
// for (var key in obj) {
// if (obj.hasOwnProperty(key)) {
// var value = obj[key];
// console.log(key + ': ' + value);
// }
// }
})
},
goback(id){
console.log(id,"id");
this.$router.replace({
path: '/project/index',
query: { projectId: id }
})
},
},
}
</script>

@ -18,7 +18,7 @@ module.exports = {
// 部署生产环境和开发环境下的URL。
// 默认情况下Vue CLI 会假设你的应用是被部署在一个域名的根路径上
// 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
publicPath: process.env.NODE_ENV === "production" ? "/" : "/",
publicPath: process.env.NODE_ENV === "production" ? "/demo/JinJiHu" : "/",
// 在npm run build 或 yarn build 时 生成文件的目录名称要和baseUrl的生产环境路径一致默认dist
outputDir: "dist",
// 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)

Loading…
Cancel
Save