增加icon图表;修改供应商评价新增是选择模板禁用和提示逻辑

This commit is contained in:
linxd
2025-07-03 15:45:21 +08:00
parent 307b16e61e
commit 815cf6b89e
13 changed files with 1418 additions and 260 deletions

View File

@ -54,6 +54,180 @@
<div class="content unicode" style="display: block;">
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont">&#xec35;</span>
<div class="name">消息通知</div>
<div class="code-name">&amp;#xec35;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe618;</span>
<div class="name">供应商退出审核管理</div>
<div class="code-name">&amp;#xe618;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe77a;</span>
<div class="name">供应商退出管理</div>
<div class="code-name">&amp;#xe77a;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe60a;</span>
<div class="name">tianshen02</div>
<div class="code-name">&amp;#xe60a;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe71a;</span>
<div class="name">黑名单管理</div>
<div class="code-name">&amp;#xe71a;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe634;</span>
<div class="name">入库管理</div>
<div class="code-name">&amp;#xe634;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe61d;</span>
<div class="name">入库审核管理</div>
<div class="code-name">&amp;#xe61d;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe607;</span>
<div class="name">品类管理</div>
<div class="code-name">&amp;#xe607;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe666;</span>
<div class="name">品类库管理</div>
<div class="code-name">&amp;#xe666;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe62e;</span>
<div class="name">品类库建库审核管理</div>
<div class="code-name">&amp;#xe62e;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe757;</span>
<div class="name">供应商品类库</div>
<div class="code-name">&amp;#xe757;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe6ea;</span>
<div class="name">供应商-准入管理</div>
<div class="code-name">&amp;#xe6ea;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe63a;</span>
<div class="name">供应商准入</div>
<div class="code-name">&amp;#xe63a;</div>
</li>
<li class="dib">
<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">&#xe631;</span>
<div class="name">供应商准入审核管理</div>
<div class="code-name">&amp;#xe631;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe602;</span>
<div class="name">供应商品类准入管理</div>
<div class="code-name">&amp;#xe602;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe633;</span>
<div class="name">供应商准入评审管理</div>
<div class="code-name">&amp;#xe633;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe608;</span>
<div class="name">供应商注册代录</div>
<div class="code-name">&amp;#xe608;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe682;</span>
<div class="name">供应商信息管理</div>
<div class="code-name">&amp;#xe682;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe6e0;</span>
<div class="name">供应商变更审核管理</div>
<div class="code-name">&amp;#xe6e0;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe720;</span>
<div class="name">供应商信息检索</div>
<div class="code-name">&amp;#xe720;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe67a;</span>
<div class="name">集团合格供应商查询</div>
<div class="code-name">&amp;#xe67a;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe68d;</span>
<div class="name">注册供应商查询</div>
<div class="code-name">&amp;#xe68d;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe701;</span>
<div class="name">我的供应商查询</div>
<div class="code-name">&amp;#xe701;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe617;</span>
<div class="name">供应商消息</div>
<div class="code-name">&amp;#xe617;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe7f9;</span>
<div class="name">企业品类名录</div>
<div class="code-name">&amp;#xe7f9;</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">&#xe6c6;</span>
<div class="name">变更进度查询</div>
<div class="code-name">&amp;#xe6c6;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe601;</span>
<div class="name">供应商后台</div>
<div class="code-name">&amp;#xe601;</div>
</li>
<li class="dib">
<span class="icon iconfont">&#xe672;</span>
<div class="name">审查</div>
@ -234,10 +408,10 @@
<pre><code class="language-css"
>@font-face {
font-family: 'iconfont';
src: url('iconfont.woff2?t=1751525773477') format('woff2'),
url('iconfont.woff?t=1751525773477') format('woff'),
url('iconfont.ttf?t=1751525773477') format('truetype'),
url('iconfont.svg?t=1751525773477#iconfont') format('svg');
src: url('iconfont.woff2?t=1751528599702') format('woff2'),
url('iconfont.woff?t=1751528599702') format('woff'),
url('iconfont.ttf?t=1751528599702') format('truetype'),
url('iconfont.svg?t=1751528599702#iconfont') format('svg');
}
</code></pre>
<h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
@ -263,6 +437,267 @@
<div class="content font-class">
<ul class="icon_lists dib-box">
<li class="dib">
<span class="icon iconfont icon-xiaoxitongzhi"></span>
<div class="name">
消息通知
</div>
<div class="code-name">.icon-xiaoxitongzhi
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-confirm_margin"></span>
<div class="name">
供应商退出审核管理
</div>
<div class="code-name">.icon-confirm_margin
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-gongyingshangtuichuguanli"></span>
<div class="name">
供应商退出管理
</div>
<div class="code-name">.icon-gongyingshangtuichuguanli
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-tianshen02"></span>
<div class="name">
tianshen02
</div>
<div class="code-name">.icon-tianshen02
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-heimingdanguanli"></span>
<div class="name">
黑名单管理
</div>
<div class="code-name">.icon-heimingdanguanli
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-rukuguanli-"></span>
<div class="name">
入库管理
</div>
<div class="code-name">.icon-rukuguanli-
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-rukushenheguanli"></span>
<div class="name">
入库审核管理
</div>
<div class="code-name">.icon-rukushenheguanli
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-pinleiguanli"></span>
<div class="name">
品类管理
</div>
<div class="code-name">.icon-pinleiguanli
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-pinleikuguanli"></span>
<div class="name">
品类库管理
</div>
<div class="code-name">.icon-pinleikuguanli
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-gongzhuangkucun"></span>
<div class="name">
品类库建库审核管理
</div>
<div class="code-name">.icon-gongzhuangkucun
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-tikuguanli"></span>
<div class="name">
供应商品类库
</div>
<div class="code-name">.icon-tikuguanli
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-gongyingshang-zhunruguanli"></span>
<div class="name">
供应商-准入管理
</div>
<div class="code-name">.icon-gongyingshang-zhunruguanli
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-gongyingshangzhunru"></span>
<div class="name">
供应商准入
</div>
<div class="code-name">.icon-gongyingshangzhunru
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-hetong"></span>
<div class="name">
供应商品类准入审核管理
</div>
<div class="code-name">.icon-hetong
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-icon-FollowerManagement"></span>
<div class="name">
供应商准入审核管理
</div>
<div class="code-name">.icon-icon-FollowerManagement
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-ico3"></span>
<div class="name">
供应商品类准入管理
</div>
<div class="code-name">.icon-ico3
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-wodeyiban"></span>
<div class="name">
供应商准入评审管理
</div>
<div class="code-name">.icon-wodeyiban
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-yuntijiantubiao_huiyuanguanli"></span>
<div class="name">
供应商注册代录
</div>
<div class="code-name">.icon-yuntijiantubiao_huiyuanguanli
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-gongyingshangxinxiguanli"></span>
<div class="name">
供应商信息管理
</div>
<div class="code-name">.icon-gongyingshangxinxiguanli
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-biangengshenheguanli"></span>
<div class="name">
供应商变更审核管理
</div>
<div class="code-name">.icon-biangengshenheguanli
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-xinxijiansuobeifen"></span>
<div class="name">
供应商信息检索
</div>
<div class="code-name">.icon-xinxijiansuobeifen
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-hezha"></span>
<div class="name">
集团合格供应商查询
</div>
<div class="code-name">.icon-hezha
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-zhucechaxun"></span>
<div class="name">
注册供应商查询
</div>
<div class="code-name">.icon-zhucechaxun
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-wodechaxun"></span>
<div class="name">
我的供应商查询
</div>
<div class="code-name">.icon-wodechaxun
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-gongyingshangxiaoxi"></span>
<div class="name">
供应商消息
</div>
<div class="code-name">.icon-gongyingshangxiaoxi
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-leimupinleifenleileibie"></span>
<div class="name">
企业品类名录
</div>
<div class="code-name">.icon-leimupinleifenleileibie
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-gongzuotai"></span>
<div class="name">
工作台
</div>
<div class="code-name">.icon-gongzuotai
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-biangengjinduchaxun"></span>
<div class="name">
变更进度查询
</div>
<div class="code-name">.icon-biangengjinduchaxun
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-gongyingshanghoutai"></span>
<div class="name">
供应商后台
</div>
<div class="code-name">.icon-gongyingshanghoutai
</div>
</li>
<li class="dib">
<span class="icon iconfont icon-shencha"></span>
<div class="name">
@ -533,6 +968,238 @@
<div class="content symbol">
<ul class="icon_lists dib-box">
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-xiaoxitongzhi"></use>
</svg>
<div class="name">消息通知</div>
<div class="code-name">#icon-xiaoxitongzhi</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-confirm_margin"></use>
</svg>
<div class="name">供应商退出审核管理</div>
<div class="code-name">#icon-confirm_margin</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-gongyingshangtuichuguanli"></use>
</svg>
<div class="name">供应商退出管理</div>
<div class="code-name">#icon-gongyingshangtuichuguanli</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-tianshen02"></use>
</svg>
<div class="name">tianshen02</div>
<div class="code-name">#icon-tianshen02</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-heimingdanguanli"></use>
</svg>
<div class="name">黑名单管理</div>
<div class="code-name">#icon-heimingdanguanli</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-rukuguanli-"></use>
</svg>
<div class="name">入库管理</div>
<div class="code-name">#icon-rukuguanli-</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-rukushenheguanli"></use>
</svg>
<div class="name">入库审核管理</div>
<div class="code-name">#icon-rukushenheguanli</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-pinleiguanli"></use>
</svg>
<div class="name">品类管理</div>
<div class="code-name">#icon-pinleiguanli</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-pinleikuguanli"></use>
</svg>
<div class="name">品类库管理</div>
<div class="code-name">#icon-pinleikuguanli</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-gongzhuangkucun"></use>
</svg>
<div class="name">品类库建库审核管理</div>
<div class="code-name">#icon-gongzhuangkucun</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-tikuguanli"></use>
</svg>
<div class="name">供应商品类库</div>
<div class="code-name">#icon-tikuguanli</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-gongyingshang-zhunruguanli"></use>
</svg>
<div class="name">供应商-准入管理</div>
<div class="code-name">#icon-gongyingshang-zhunruguanli</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-gongyingshangzhunru"></use>
</svg>
<div class="name">供应商准入</div>
<div class="code-name">#icon-gongyingshangzhunru</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-hetong"></use>
</svg>
<div class="name">供应商品类准入审核管理</div>
<div class="code-name">#icon-hetong</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-icon-FollowerManagement"></use>
</svg>
<div class="name">供应商准入审核管理</div>
<div class="code-name">#icon-icon-FollowerManagement</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-ico3"></use>
</svg>
<div class="name">供应商品类准入管理</div>
<div class="code-name">#icon-ico3</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-wodeyiban"></use>
</svg>
<div class="name">供应商准入评审管理</div>
<div class="code-name">#icon-wodeyiban</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-yuntijiantubiao_huiyuanguanli"></use>
</svg>
<div class="name">供应商注册代录</div>
<div class="code-name">#icon-yuntijiantubiao_huiyuanguanli</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-gongyingshangxinxiguanli"></use>
</svg>
<div class="name">供应商信息管理</div>
<div class="code-name">#icon-gongyingshangxinxiguanli</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-biangengshenheguanli"></use>
</svg>
<div class="name">供应商变更审核管理</div>
<div class="code-name">#icon-biangengshenheguanli</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-xinxijiansuobeifen"></use>
</svg>
<div class="name">供应商信息检索</div>
<div class="code-name">#icon-xinxijiansuobeifen</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-hezha"></use>
</svg>
<div class="name">集团合格供应商查询</div>
<div class="code-name">#icon-hezha</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-zhucechaxun"></use>
</svg>
<div class="name">注册供应商查询</div>
<div class="code-name">#icon-zhucechaxun</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-wodechaxun"></use>
</svg>
<div class="name">我的供应商查询</div>
<div class="code-name">#icon-wodechaxun</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-gongyingshangxiaoxi"></use>
</svg>
<div class="name">供应商消息</div>
<div class="code-name">#icon-gongyingshangxiaoxi</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-leimupinleifenleileibie"></use>
</svg>
<div class="name">企业品类名录</div>
<div class="code-name">#icon-leimupinleifenleileibie</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-gongzuotai"></use>
</svg>
<div class="name">工作台</div>
<div class="code-name">#icon-gongzuotai</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-biangengjinduchaxun"></use>
</svg>
<div class="name">变更进度查询</div>
<div class="code-name">#icon-biangengjinduchaxun</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-gongyingshanghoutai"></use>
</svg>
<div class="name">供应商后台</div>
<div class="code-name">#icon-gongyingshanghoutai</div>
</li>
<li class="dib">
<svg class="icon svg-icon" aria-hidden="true">
<use xlink:href="#icon-shencha"></use>

View File

@ -1,9 +1,9 @@
@font-face {
font-family: "iconfont"; /* Project id 4950533 */
src: url('iconfont.woff2?t=1751525773477') format('woff2'),
url('iconfont.woff?t=1751525773477') format('woff'),
url('iconfont.ttf?t=1751525773477') format('truetype'),
url('iconfont.svg?t=1751525773477#iconfont') format('svg');
src: url('iconfont.woff2?t=1751528599702') format('woff2'),
url('iconfont.woff?t=1751528599702') format('woff'),
url('iconfont.ttf?t=1751528599702') format('truetype'),
url('iconfont.svg?t=1751528599702#iconfont') format('svg');
}
.iconfont {
@ -14,6 +14,122 @@
-moz-osx-font-smoothing: grayscale;
}
.icon-xiaoxitongzhi:before {
content: "\ec35";
}
.icon-confirm_margin:before {
content: "\e618";
}
.icon-gongyingshangtuichuguanli:before {
content: "\e77a";
}
.icon-tianshen02:before {
content: "\e60a";
}
.icon-heimingdanguanli:before {
content: "\e71a";
}
.icon-rukuguanli-:before {
content: "\e634";
}
.icon-rukushenheguanli:before {
content: "\e61d";
}
.icon-pinleiguanli:before {
content: "\e607";
}
.icon-pinleikuguanli:before {
content: "\e666";
}
.icon-gongzhuangkucun:before {
content: "\e62e";
}
.icon-tikuguanli:before {
content: "\e757";
}
.icon-gongyingshang-zhunruguanli:before {
content: "\e6ea";
}
.icon-gongyingshangzhunru:before {
content: "\e63a";
}
.icon-hetong:before {
content: "\e63c";
}
.icon-icon-FollowerManagement:before {
content: "\e631";
}
.icon-ico3:before {
content: "\e602";
}
.icon-wodeyiban:before {
content: "\e633";
}
.icon-yuntijiantubiao_huiyuanguanli:before {
content: "\e608";
}
.icon-gongyingshangxinxiguanli:before {
content: "\e682";
}
.icon-biangengshenheguanli:before {
content: "\e6e0";
}
.icon-xinxijiansuobeifen:before {
content: "\e720";
}
.icon-hezha:before {
content: "\e67a";
}
.icon-zhucechaxun:before {
content: "\e68d";
}
.icon-wodechaxun:before {
content: "\e701";
}
.icon-gongyingshangxiaoxi:before {
content: "\e617";
}
.icon-leimupinleifenleileibie:before {
content: "\e7f9";
}
.icon-gongzuotai:before {
content: "\e606";
}
.icon-biangengjinduchaxun:before {
content: "\e6c6";
}
.icon-gongyingshanghoutai:before {
content: "\e601";
}
.icon-shencha:before {
content: "\e672";
}

File diff suppressed because one or more lines are too long

View File

@ -5,6 +5,209 @@
"css_prefix_text": "icon-",
"description": "",
"glyphs": [
{
"icon_id": "5767876",
"name": "消息通知",
"font_class": "xiaoxitongzhi",
"unicode": "ec35",
"unicode_decimal": 60469
},
{
"icon_id": "13411430",
"name": "供应商退出审核管理",
"font_class": "confirm_margin",
"unicode": "e618",
"unicode_decimal": 58904
},
{
"icon_id": "42522350",
"name": "供应商退出管理",
"font_class": "gongyingshangtuichuguanli",
"unicode": "e77a",
"unicode_decimal": 59258
},
{
"icon_id": "15307721",
"name": "tianshen02",
"font_class": "tianshen02",
"unicode": "e60a",
"unicode_decimal": 58890
},
{
"icon_id": "28638615",
"name": "黑名单管理",
"font_class": "heimingdanguanli",
"unicode": "e71a",
"unicode_decimal": 59162
},
{
"icon_id": "6789086",
"name": "入库管理",
"font_class": "rukuguanli-",
"unicode": "e634",
"unicode_decimal": 58932
},
{
"icon_id": "38737003",
"name": "入库审核管理",
"font_class": "rukushenheguanli",
"unicode": "e61d",
"unicode_decimal": 58909
},
{
"icon_id": "9609654",
"name": "品类管理",
"font_class": "pinleiguanli",
"unicode": "e607",
"unicode_decimal": 58887
},
{
"icon_id": "28648732",
"name": "品类库管理",
"font_class": "pinleikuguanli",
"unicode": "e666",
"unicode_decimal": 58982
},
{
"icon_id": "34572462",
"name": "品类库建库审核管理",
"font_class": "gongzhuangkucun",
"unicode": "e62e",
"unicode_decimal": 58926
},
{
"icon_id": "5996647",
"name": "供应商品类库",
"font_class": "tikuguanli",
"unicode": "e757",
"unicode_decimal": 59223
},
{
"icon_id": "9171168",
"name": "供应商-准入管理",
"font_class": "gongyingshang-zhunruguanli",
"unicode": "e6ea",
"unicode_decimal": 59114
},
{
"icon_id": "12234976",
"name": "供应商准入",
"font_class": "gongyingshangzhunru",
"unicode": "e63a",
"unicode_decimal": 58938
},
{
"icon_id": "18023194",
"name": "供应商品类准入审核管理",
"font_class": "hetong",
"unicode": "e63c",
"unicode_decimal": 58940
},
{
"icon_id": "20664884",
"name": "供应商准入审核管理",
"font_class": "icon-FollowerManagement",
"unicode": "e631",
"unicode_decimal": 58929
},
{
"icon_id": "22850117",
"name": "供应商品类准入管理",
"font_class": "ico3",
"unicode": "e602",
"unicode_decimal": 58882
},
{
"icon_id": "32058481",
"name": "供应商准入评审管理",
"font_class": "wodeyiban",
"unicode": "e633",
"unicode_decimal": 58931
},
{
"icon_id": "6753037",
"name": "供应商注册代录",
"font_class": "yuntijiantubiao_huiyuanguanli",
"unicode": "e608",
"unicode_decimal": 58888
},
{
"icon_id": "36778371",
"name": "供应商信息管理",
"font_class": "gongyingshangxinxiguanli",
"unicode": "e682",
"unicode_decimal": 59010
},
{
"icon_id": "43221128",
"name": "供应商变更审核管理",
"font_class": "biangengshenheguanli",
"unicode": "e6e0",
"unicode_decimal": 59104
},
{
"icon_id": "16840422",
"name": "供应商信息检索",
"font_class": "xinxijiansuobeifen",
"unicode": "e720",
"unicode_decimal": 59168
},
{
"icon_id": "7303493",
"name": "集团合格供应商查询",
"font_class": "hezha",
"unicode": "e67a",
"unicode_decimal": 59002
},
{
"icon_id": "9806465",
"name": "注册供应商查询",
"font_class": "zhucechaxun",
"unicode": "e68d",
"unicode_decimal": 59021
},
{
"icon_id": "41582327",
"name": "我的供应商查询",
"font_class": "wodechaxun",
"unicode": "e701",
"unicode_decimal": 59137
},
{
"icon_id": "836928",
"name": "供应商消息",
"font_class": "gongyingshangxiaoxi",
"unicode": "e617",
"unicode_decimal": 58903
},
{
"icon_id": "689262",
"name": "企业品类名录",
"font_class": "leimupinleifenleileibie",
"unicode": "e7f9",
"unicode_decimal": 59385
},
{
"icon_id": "7215957",
"name": "工作台",
"font_class": "gongzuotai",
"unicode": "e606",
"unicode_decimal": 58886
},
{
"icon_id": "9359238",
"name": "变更进度查询",
"font_class": "biangengjinduchaxun",
"unicode": "e6c6",
"unicode_decimal": 59078
},
{
"icon_id": "41664529",
"name": "供应商后台",
"font_class": "gongyingshanghoutai",
"unicode": "e601",
"unicode_decimal": 58881
},
{
"icon_id": "28410627",
"name": "审查",

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -65,6 +65,12 @@ export default {
'supplierTemplateManage.confirm.ok': 'OK',
'supplierTemplateManage.confirm.cancel': 'Cancel',
// Template switch confirmation
'supplierTemplateManage.confirm.switchTemplate.title': 'Confirm Template Switch',
'supplierTemplateManage.confirm.switchTemplate.content': 'Switching template will overwrite current edited data. Do you want to continue?',
'supplierTemplateManage.confirm.switchTemplate.ok': 'OK',
'supplierTemplateManage.confirm.switchTemplate.cancel': 'Cancel',
// Detail page
'supplierTemplateManage.detail.title': 'Template Details',
'supplierTemplateManage.detail.card.basicInfo': 'Basic Information',

View File

@ -64,6 +64,12 @@ export default {
'supplierTemplateManage.confirm.ok': '确定',
'supplierTemplateManage.confirm.cancel': '取消',
// 模板切换确认
'supplierTemplateManage.confirm.switchTemplate.title': '确认切换模板',
'supplierTemplateManage.confirm.switchTemplate.content': '切换模板将覆盖当前已编辑的数据,是否继续?',
'supplierTemplateManage.confirm.switchTemplate.ok': '确定',
'supplierTemplateManage.confirm.switchTemplate.cancel': '取消',
// 详情页面
'supplierTemplateManage.detail.title': '模板详情',
'supplierTemplateManage.detail.card.basicInfo': '基本信息',

View File

@ -79,8 +79,8 @@ const SupplierAnnualReview: React.FC = () => {
if (params.annualreviewTheme) {
requestParams.annualreviewTheme = params.annualreviewTheme;
}
if (params.reviewStatus) {
requestParams.reviewStatus = params.reviewStatus;
if (params.status) {
requestParams.status = params.status;
}
if (params.timeRange && params.timeRange.length === 2) {
requestParams.startTime = params.timeRange[0];
@ -213,8 +213,8 @@ const SupplierAnnualReview: React.FC = () => {
},
{
title: intl.formatMessage({ id: 'supplierAnnualReview.list.status' }),
dataIndex: 'reviewStatusName',
key: 'reviewStatusName',
dataIndex: 'statusName',
key: 'statusName',
width: 100
},
{
@ -281,7 +281,7 @@ const SupplierAnnualReview: React.FC = () => {
<Form.Item name="annualreviewTheme" label={intl.formatMessage({ id: 'supplierAnnualReview.list.reviewTheme' })}>
<Input placeholder={intl.formatMessage({ id: 'supplierAnnualReview.list.pleaseInputReviewTheme' })} allowClear />
</Form.Item>
<Form.Item name="reviewStatus" label={intl.formatMessage({ id: 'supplierAnnualReview.list.status' })}>
<Form.Item name="status" label={intl.formatMessage({ id: 'supplierAnnualReview.list.status' })}>
<Select placeholder={intl.formatMessage({ id: 'supplierAnnualReview.list.pleaseSelectStatus' })} allowClear style={{ width: 120 }}>
{reviewStatus.map((item) => (
<Option key={item.code} value={item.code}>{item.dicName}</Option>

View File

@ -1,30 +1,14 @@
import React, { useState, useEffect } from 'react';
import { history, useIntl } from 'umi';
import {
Button,
Table,
Space,
message,
Input,
Select,
Form,
Tooltip,
Tag,
} from 'antd';
import { Button, Table, Space, message, Input, Select, Form, Tooltip, Tag } from 'antd';
import type { TablePaginationConfig } from 'antd';
import {
PlusOutlined,
DeleteOutlined,
SearchOutlined,
} from '@ant-design/icons';
import { PlusOutlined, DeleteOutlined, SearchOutlined } from '@ant-design/icons';
import {
TemplateStatusText,
TemplateStatusColor,
TemplateStatus,
} from '@/dicts/supplierTemplateDict';
import {
getTemplateList,
} from '@/servers/api/supplierEvaluate';
import { getTemplateList } from '@/servers/api/supplierEvaluate';
import CategorySelector from '@/components/CategorySelector/CategorySelector';
const { Option } = Select;
@ -41,15 +25,13 @@ const SupplierTemplateManage: React.FC = () => {
total: 0,
showSizeChanger: true,
showQuickJumper: true,
showTotal: (total) => intl.formatMessage(
{ id: 'supplierTemplateManage.pagination.total' },
{ total }
),
showTotal: (total) =>
intl.formatMessage({ id: 'supplierTemplateManage.pagination.total' }, { total }),
});
const [searchParams, setSearchParams] = useState({});
// 部门下拉选项
const [companyOptions, setCompanyOptions] = useState<{ label: string, value: string }[]>([
const [companyOptions, setCompanyOptions] = useState<{ label: string; value: string }[]>([
{ label: '中山市合创展包装材料有限公司', value: '中山市合创展包装材料有限公司' },
{ label: '广州市科技发展有限公司', value: '广州市科技发展有限公司' },
{ label: '深圳市创新科技有限公司', value: '深圳市创新科技有限公司' },
@ -57,11 +39,7 @@ const SupplierTemplateManage: React.FC = () => {
]);
// 获取模板列表
const fetchTemplateList = async (
current = 1,
pageSize = 10,
params = searchParams,
) => {
const fetchTemplateList = async (current = 1, pageSize = 10, params = searchParams) => {
// 更新搜索参数状态
if (params !== searchParams) {
setSearchParams(params);
@ -81,7 +59,7 @@ const SupplierTemplateManage: React.FC = () => {
if (res.success && res.data) {
// 处理返回的数据
const records = res.data.records
const records = res.data.records;
setTemplateData(records);
setPagination({
@ -91,7 +69,9 @@ const SupplierTemplateManage: React.FC = () => {
total: res.data.total,
});
} else {
message.error(intl.formatMessage({ id: 'supplierTemplateManage.message.fetchFailed' }) || res.message);
message.error(
intl.formatMessage({ id: 'supplierTemplateManage.message.fetchFailed' }) || res.message,
);
}
} catch (error) {
console.error('获取模板列表失败:', error);
@ -113,7 +93,7 @@ const SupplierTemplateManage: React.FC = () => {
pathname: 'supplierTemplateManageDetail',
state: {
id: record.id,
}
},
});
};
@ -124,16 +104,19 @@ const SupplierTemplateManage: React.FC = () => {
pathname: 'supplierTemplateManageAdd',
state: {
isEdit: true,
editData: record
}
editData: record,
},
});
};
// 获取状态标签
const getStatusTag = (status: string | undefined) => {
if (!status) return <Tag>{intl.formatMessage({ id: 'supplierTemplateManage.status.unknown' })}</Tag>;
if (!status)
return <Tag>{intl.formatMessage({ id: 'supplierTemplateManage.status.unknown' })}</Tag>;
const color = TemplateStatusColor[status as keyof typeof TemplateStatusColor] || 'default';
const text = TemplateStatusText[status as keyof typeof TemplateStatusText] || intl.formatMessage({ id: 'supplierTemplateManage.status.unknown' });
const text =
TemplateStatusText[status as keyof typeof TemplateStatusText] ||
intl.formatMessage({ id: 'supplierTemplateManage.status.unknown' });
return <Tag color={color}>{text}</Tag>;
};
@ -209,9 +192,12 @@ const SupplierTemplateManage: React.FC = () => {
align: 'center' as const,
render: (_: unknown, record: SupplierTemplateManage.TemplateItem) => (
<Space size="middle">
<Button type="link" onClick={() => handleEdit(record)}>
{intl.formatMessage({ id: 'supplierTemplateManage.button.edit' })}
</Button>
{/* 只有草稿状态才可以编辑 */}
{record.status === TemplateStatus.DRAFT && (
<Button type="link" onClick={() => handleEdit(record)}>
{intl.formatMessage({ id: 'supplierTemplateManage.button.edit' })}
</Button>
)}
<Button type="link" onClick={() => handleView(record)}>
{intl.formatMessage({ id: 'supplierTemplateManage.button.view' })}
</Button>
@ -248,17 +234,39 @@ const SupplierTemplateManage: React.FC = () => {
layout="inline"
className="filter-form"
>
<Form.Item name="templateName" label={intl.formatMessage({ id: 'supplierTemplateManage.column.templateName' })}>
<Input placeholder={intl.formatMessage({ id: 'supplierTemplateManage.placeholder.templateName' })} allowClear />
<Form.Item
name="templateName"
label={intl.formatMessage({ id: 'supplierTemplateManage.column.templateName' })}
>
<Input
placeholder={intl.formatMessage({
id: 'supplierTemplateManage.placeholder.templateName',
})}
allowClear
/>
</Form.Item>
<Form.Item name="tenantName" label={intl.formatMessage({ id: 'supplierTemplateManage.column.tenantName' })}>
<Select placeholder={intl.formatMessage({ id: 'supplierTemplateManage.placeholder.tenantName' })} allowClear style={{ width: 200 }}>
{companyOptions.map(option => (
<Option key={option.value} value={option.value}>{option.label}</Option>
<Form.Item
name="tenantName"
label={intl.formatMessage({ id: 'supplierTemplateManage.column.tenantName' })}
>
<Select
placeholder={intl.formatMessage({
id: 'supplierTemplateManage.placeholder.tenantName',
})}
allowClear
style={{ width: 200 }}
>
{companyOptions.map((option) => (
<Option key={option.value} value={option.value}>
{option.label}
</Option>
))}
</Select>
</Form.Item>
<Form.Item name="categoryId" label={intl.formatMessage({ id: 'supplierTemplateManage.column.category' })}>
<Form.Item
name="categoryId"
label={intl.formatMessage({ id: 'supplierTemplateManage.column.category' })}
>
<CategorySelector multiple={false} style={{ width: 200 }} />
</Form.Item>
<Form.Item className="filter-btns">

View File

@ -17,7 +17,7 @@ import {
Modal,
} from 'antd';
import { history, useLocation, useIntl, connect } from 'umi';
import type { Dispatch,ConnectProps } from 'umi';
import type { Dispatch, ConnectProps } from 'umi';
import type { BreadcrumbState } from '@/models/breadcrumb';
import { ArrowLeftOutlined, SaveOutlined, ExclamationCircleOutlined } from '@ant-design/icons';
import EvaluateTemplateTable from '@/components/EvaluateTemplateTable';
@ -27,13 +27,13 @@ import {
CategoryLimitationTypeText,
TemplateStatus,
TemplateStatusText,
IndicatorAddOption
IndicatorAddOption,
} from '@/dicts/supplierTemplateDict';
import {
getTemplateDetail,
getAllTemplates,
updateTemplate,
addTemplate
addTemplate,
} from '@/servers/api/supplierEvaluate';
import styles from './supplierTemplateManage.less';
@ -70,14 +70,14 @@ const SupplierTemplateManageAdd: React.FC<PageProps> = ({ breadcrumb, dispatch }
const [loading, setLoading] = useState<boolean>(false);
const [templateData, setTemplateData] = useState<SupplierTemplateManage.IndicatorSt[]>([]);
const [isEdit, setIsEdit] = useState<boolean>(false);
const [templateDetail, setTemplateDetail] = useState<SupplierTemplateManage.TemplateDetailResponse['data']>();
const [templateDetail, setTemplateDetail] =
useState<SupplierTemplateManage.TemplateDetailResponse['data']>();
const [templateList, setTemplateList] = useState<SupplierTemplateManage.TemplateItem[]>([]);
// 添加控制开关的状态
const [indicatorStMore, setIndicatorStMore] = useState<string>(IndicatorAddOption.CAN_ADD);
const [indicatorNdMore, setIndicatorNdMore] = useState<string>(IndicatorAddOption.CAN_ADD);
// 获取路由传递的数据
const location = useLocation<LocationState>();
@ -88,16 +88,26 @@ const SupplierTemplateManageAdd: React.FC<PageProps> = ({ breadcrumb, dispatch }
if (res.success && res.data) {
// 如果是修改,需要过滤掉自己
if (location.state?.editData) {
setTemplateList(res.data.filter((template: SupplierTemplateManage.TemplateItem) => template.id !== location.state.editData?.id));
setTemplateList(
res.data.filter(
(template: SupplierTemplateManage.TemplateItem) =>
template.id !== location.state.editData?.id,
),
);
} else {
setTemplateList(res.data);
}
} else {
message.error(intl.formatMessage({ id: 'supplierTemplateManage.message.getTemplateListFailed' }) || res.message);
message.error(
intl.formatMessage({ id: 'supplierTemplateManage.message.getTemplateListFailed' }) ||
res.message,
);
}
} catch (error) {
console.error('获取模板列表失败:', error);
message.error(intl.formatMessage({ id: 'supplierTemplateManage.message.getTemplateListFailed' }));
message.error(
intl.formatMessage({ id: 'supplierTemplateManage.message.getTemplateListFailed' }),
);
}
};
@ -115,7 +125,7 @@ const SupplierTemplateManageAdd: React.FC<PageProps> = ({ breadcrumb, dispatch }
categoryLimitation: res.data.categoryLimitation,
categoryId: res.data.categoryId,
status: res.data.status,
copyTemplateId: res.data.templateType,
copyTemplateId: res.data.copyTemplateId,
indicatorStMore: res.data.indicatorStMore || IndicatorAddOption.CAN_ADD,
indicatorNdMore: res.data.indicatorNdMore || IndicatorAddOption.CAN_ADD,
});
@ -125,7 +135,10 @@ const SupplierTemplateManageAdd: React.FC<PageProps> = ({ breadcrumb, dispatch }
setTemplateData(res.data.indicatorStList as SupplierTemplateManage.IndicatorSt[]);
}
} else {
message.error(intl.formatMessage({ id: 'supplierTemplateManage.message.getDetailFailed' }) || res.message);
message.error(
intl.formatMessage({ id: 'supplierTemplateManage.message.getDetailFailed' }) ||
res.message,
);
}
} catch (error) {
console.error('获取模板详情失败:', error);
@ -138,7 +151,7 @@ const SupplierTemplateManageAdd: React.FC<PageProps> = ({ breadcrumb, dispatch }
if (location.state?.editData?.id && dispatch) {
dispatch({
type: 'breadcrumb/updateBreadcrumbName',
payload: intl.formatMessage({ id: "supplierTemplateManage.edit.title" }),
payload: intl.formatMessage({ id: 'supplierTemplateManage.edit.title' }),
});
}
return () => {
@ -170,13 +183,13 @@ const SupplierTemplateManageAdd: React.FC<PageProps> = ({ breadcrumb, dispatch }
// 提交数据的函数
const handleDataSubmit = async (values: FormValues) => {
// 准备提交数据
const selectedTemplate = templateList.find(template => template.id === values.copyTemplateId);
const selectedTemplate = templateList.find((template) => template.id === values.copyTemplateId);
const dataToSubmit: SupplierTemplateManage.TemplateUpdateRequest = {
...values,
templateType: selectedTemplate?.templateType || '',
indicatorStList: templateData,
indicatorTypeMore: IndicatorAddOption.CAN_ADD,
status: parseInt(values.status, 10)
status: parseInt(values.status, 10),
} as unknown as SupplierTemplateManage.TemplateUpdateRequest;
// 如果是编辑模式添加ID
@ -191,20 +204,25 @@ const SupplierTemplateManageAdd: React.FC<PageProps> = ({ breadcrumb, dispatch }
if (isEdit) {
res = await updateTemplate(dataToSubmit);
} else {
res = await addTemplate(dataToSubmit as unknown as SupplierTemplateManage.TemplateAddRequest);
res = await addTemplate(
dataToSubmit as unknown as SupplierTemplateManage.TemplateAddRequest,
);
}
if (res.success) {
message.success(isEdit
? intl.formatMessage({ id: 'supplierTemplateManage.message.updateSuccess' })
: intl.formatMessage({ id: 'supplierTemplateManage.message.saveSuccess' })
message.success(
isEdit
? intl.formatMessage({ id: 'supplierTemplateManage.message.updateSuccess' })
: intl.formatMessage({ id: 'supplierTemplateManage.message.saveSuccess' }),
);
history.goBack();
} else {
message.error(res.message || (isEdit
? intl.formatMessage({ id: 'supplierTemplateManage.message.updateFailed' })
: intl.formatMessage({ id: 'supplierTemplateManage.message.saveFailed' })
));
message.error(
res.message ||
(isEdit
? intl.formatMessage({ id: 'supplierTemplateManage.message.updateFailed' })
: intl.formatMessage({ id: 'supplierTemplateManage.message.saveFailed' })),
);
}
} catch (error) {
console.error('提交失败:', error);
@ -261,14 +279,11 @@ const SupplierTemplateManageAdd: React.FC<PageProps> = ({ breadcrumb, dispatch }
break;
}
};
// 处理模板选择
const handleTemplateSelect = async (templateId: string) => {
// 如果是新建模式,并且选择了模板,获取模板详情作为基础数据
const searchTemplateInfoCopyToTemplateData = async (templateId: string) => {
// 要求,如果选择模板时,需读取模板中的 indicatorStMore(一级指标是否可编辑) 和 indicatorNdMore(二级指标是否可编辑) 的值
// 来动态设置 EvaluateTemplateTable 组件的value(templateData) 中的disable属性
// 注意 当一级指标禁用时,需要判断指标类型是通用类型的才禁用,其他类型的指标不进行禁用
if (!isEdit && templateId) {
if (templateId) {
try {
setLoading(true);
const res = await getTemplateDetail(templateId);
@ -281,23 +296,30 @@ const SupplierTemplateManageAdd: React.FC<PageProps> = ({ breadcrumb, dispatch }
// 只复制指标数据,不复制基础信息
if (res.data.indicatorStList && res.data.indicatorStList.length > 0) {
// 复制模板数据但清除ID以创建新记录
const copiedIndicatorStList = JSON.parse(JSON.stringify(res.data.indicatorStList)).map((stItem: SupplierTemplateManage.IndicatorSt) => {
// 通用类型指标禁用,其他类型指标不禁用 (如果当前是true 表示已禁用, 需要同时满足当前指标类型是通用类型)
stItem.disabled = indicatorStMoreStatus && stItem.indicatorType === "generalType";
// 删除ID而不是设为undefined
// delete stItem.id;
stItem.indicatorNdList = stItem.indicatorNdList.map((ndItem: SupplierTemplateManage.IndicatorNd) => {
ndItem.disabled = indicatorNdMoreStatus
// delete ndItem.id;
return ndItem;
});
return stItem;
});
const copiedIndicatorStList = JSON.parse(JSON.stringify(res.data.indicatorStList)).map(
(stItem: SupplierTemplateManage.IndicatorSt) => {
// 通用类型指标禁用,其他类型指标不禁用 (如果当前是true 表示已禁用, 需要同时满足当前指标类型是通用类型)
stItem.disabled = indicatorStMoreStatus && stItem.indicatorType === 'generalType';
// 删除ID而不是设为undefined
// delete stItem.id;
stItem.indicatorNdList = stItem.indicatorNdList.map(
(ndItem: SupplierTemplateManage.IndicatorNd) => {
ndItem.disabled = indicatorNdMoreStatus;
// delete ndItem.id;
return ndItem;
},
);
return stItem;
},
);
setTemplateData(copiedIndicatorStList);
}
} else {
message.error(intl.formatMessage({ id: 'supplierTemplateManage.message.getDetailFailed' }) || res.message);
message.error(
intl.formatMessage({ id: 'supplierTemplateManage.message.getDetailFailed' }) ||
res.message,
);
}
} catch (error) {
console.error('获取模板详情失败:', error);
@ -307,175 +329,247 @@ const SupplierTemplateManageAdd: React.FC<PageProps> = ({ breadcrumb, dispatch }
}
}
};
// 处理模板选择
const handleTemplateSelect = async (templateId: string) => {
if (isEdit) {
// 如果是编辑模式,需要增加弹出提示
// 提示内容,切换模板会覆盖当前数据,是否继续
confirm({
title: intl.formatMessage({ id: 'supplierTemplateManage.confirm.switchTemplate.title' }),
content: intl.formatMessage({
id: 'supplierTemplateManage.confirm.switchTemplate.content',
}),
okText: intl.formatMessage({ id: 'supplierTemplateManage.confirm.switchTemplate.ok' }),
cancelText: intl.formatMessage({
id: 'supplierTemplateManage.confirm.switchTemplate.cancel',
}),
onOk: () => {
searchTemplateInfoCopyToTemplateData(templateId);
},
onCancel: () => {
// 取消选择 ,将select还原回去
form.setFieldsValue({
copyTemplateId: templateDetail?.copyTemplateId,
});
},
});
} else {
searchTemplateInfoCopyToTemplateData(templateId);
}
};
return (
<div className="common-container">
<div className={styles.pageHeader}>
<Title level={4} style={{ margin: 0 }}>
{isEdit
? intl.formatMessage({ id: 'supplierTemplateManage.edit.title' })
: intl.formatMessage({ id: 'supplierTemplateManage.add.title' })
}
</Title>
<Button type="link" icon={<ArrowLeftOutlined />} onClick={handleBack}>
{intl.formatMessage({ id: 'supplierTemplateManage.button.back' })}
</Button>
<div className={styles.pageHeader}>
<Title level={4} style={{ margin: 0 }}>
{isEdit
? intl.formatMessage({ id: 'supplierTemplateManage.edit.title' })
: intl.formatMessage({ id: 'supplierTemplateManage.add.title' })}
</Title>
<Button type="link" icon={<ArrowLeftOutlined />} onClick={handleBack}>
{intl.formatMessage({ id: 'supplierTemplateManage.button.back' })}
</Button>
</div>
<Form<FormValues>
form={form}
onFinish={handleSubmit}
initialValues={{
categoryLimitation: CategoryLimitationType.UNIVERSAL,
status: TemplateStatus.DRAFT,
indicatorStMore: IndicatorAddOption.CAN_ADD,
indicatorNdMore: IndicatorAddOption.CAN_ADD,
}}
labelCol={{ span: 7 }}
wrapperCol={{ span: 17 }}
>
<Spin spinning={loading}>
<Card
title={intl.formatMessage({ id: 'supplierTemplateManage.card.basicInfo' })}
bordered={false}
className={styles.innerCard}
>
<Row gutter={24}>
<Col span={8}>
<Form.Item
label={intl.formatMessage({ id: 'supplierTemplateManage.form.templateName' })}
name="templateName"
rules={[
{
required: true,
message: intl.formatMessage({
id: 'supplierTemplateManage.rule.templateName',
}),
},
]}
>
<Input
placeholder={intl.formatMessage({
id: 'supplierTemplateManage.placeholder.templateName',
})}
maxLength={50}
/>
</Form.Item>
</Col>
<Col span={8}>
<Form.Item
label={intl.formatMessage({
id: 'supplierTemplateManage.form.categoryLimitation',
})}
name="categoryLimitation"
rules={[
{
required: true,
message: intl.formatMessage({
id: 'supplierTemplateManage.rule.categoryLimitation',
}),
},
]}
>
<Radio.Group>
<Radio value={CategoryLimitationType.UNIVERSAL}>
{CategoryLimitationTypeText[CategoryLimitationType.UNIVERSAL]}
</Radio>
<Radio value={CategoryLimitationType.LIMITED}>
{CategoryLimitationTypeText[CategoryLimitationType.LIMITED]}
</Radio>
</Radio.Group>
</Form.Item>
</Col>
<Col span={8}>
<Form.Item
noStyle
shouldUpdate={(prevValues: FormValues, currentValues: FormValues) =>
prevValues.categoryLimitation !== currentValues.categoryLimitation
}
>
{({ getFieldValue }) => {
const categoryLimitation = getFieldValue('categoryLimitation');
return categoryLimitation === CategoryLimitationType.LIMITED ? (
<Form.Item
label={intl.formatMessage({
id: 'supplierTemplateManage.form.selectCategory',
})}
name="categoryId"
rules={[
{
required: true,
message: intl.formatMessage({
id: 'supplierTemplateManage.rule.category',
}),
},
]}
>
<CategorySelector value={categoryLimitation} multiple={false} />
</Form.Item>
) : null;
}}
</Form.Item>
</Col>
</Row>
<Row gutter={24}>
<Col span={8}>
<Form.Item
label={intl.formatMessage({ id: 'supplierTemplateManage.form.selectTemplate' })}
name="copyTemplateId"
>
<Select
placeholder={intl.formatMessage({
id: 'supplierTemplateManage.form.selectTemplate',
})}
loading={templateList.length === 0}
onSelect={handleTemplateSelect}
>
{templateList.map((template) =>
template.id ? (
<Option key={template.id} value={template.id}>
{template.templateName}
</Option>
) : null,
)}
</Select>
</Form.Item>
</Col>
<Col span={8}>
<Form.Item
label={intl.formatMessage({ id: 'supplierTemplateManage.form.status' })}
name="status"
rules={[{ required: true }]}
>
<Radio.Group>
<Radio value={TemplateStatus.DRAFT}>
{TemplateStatusText[TemplateStatus.DRAFT]}
</Radio>
<Radio value={TemplateStatus.ENABLED}>
{TemplateStatusText[TemplateStatus.ENABLED]}
</Radio>
<Radio value={TemplateStatus.DISABLED}>
{TemplateStatusText[TemplateStatus.DISABLED]}
</Radio>
</Radio.Group>
</Form.Item>
</Col>
</Row>
<Row gutter={24}>
<Col span={8}>
<Form.Item
label={intl.formatMessage({ id: 'supplierTemplateManage.form.indicatorStMore' })}
name="indicatorStMore"
valuePropName="checked"
getValueProps={(value) => ({ checked: value === IndicatorAddOption.CAN_ADD })}
>
<Switch
checked={indicatorStMore === IndicatorAddOption.CAN_ADD}
onChange={(checked) => handleSwitchChange('indicatorStMore', checked)}
/>
</Form.Item>
</Col>
<Col span={8}>
<Form.Item
label={intl.formatMessage({ id: 'supplierTemplateManage.form.indicatorNdMore' })}
name="indicatorNdMore"
valuePropName="checked"
getValueProps={(value) => ({ checked: value === IndicatorAddOption.CAN_ADD })}
>
<Switch
checked={indicatorNdMore === IndicatorAddOption.CAN_ADD}
onChange={(checked) => handleSwitchChange('indicatorNdMore', checked)}
/>
</Form.Item>
</Col>
</Row>
</Card>
<Divider />
<Card
title={intl.formatMessage({ id: 'supplierTemplateManage.card.indicatorInfo' })}
bordered={false}
className={styles.innerCard}
>
<EvaluateTemplateTable onChange={handleTemplateDataChange} value={templateData} />
</Card>
</Spin>
<div className={styles.formActions}>
<Space>
<Button onClick={handleBack}>
{intl.formatMessage({ id: 'supplierTemplateManage.button.cancel' })}
</Button>
<Button type="primary" htmlType="submit" loading={loading} icon={<SaveOutlined />}>
{isEdit
? intl.formatMessage({ id: 'supplierTemplateManage.button.update' })
: intl.formatMessage({ id: 'supplierTemplateManage.button.save' })}
</Button>
</Space>
</div>
<Form<FormValues>
form={form}
onFinish={handleSubmit}
initialValues={{
categoryLimitation: CategoryLimitationType.UNIVERSAL,
status: TemplateStatus.DRAFT,
indicatorStMore: IndicatorAddOption.CAN_ADD,
indicatorNdMore: IndicatorAddOption.CAN_ADD,
}}
labelCol={{ span: 7 }}
wrapperCol={{ span: 17 }}
>
<Spin spinning={loading}>
<Card title={intl.formatMessage({ id: 'supplierTemplateManage.card.basicInfo' })} bordered={false} className={styles.innerCard}>
<Row gutter={24}>
<Col span={8}>
<Form.Item
label={intl.formatMessage({ id: 'supplierTemplateManage.form.templateName' })}
name="templateName"
rules={[{ required: true, message: intl.formatMessage({ id: 'supplierTemplateManage.rule.templateName' }) }]}
>
<Input placeholder={intl.formatMessage({ id: 'supplierTemplateManage.placeholder.templateName' })} maxLength={50} />
</Form.Item>
</Col>
<Col span={8}>
<Form.Item
label={intl.formatMessage({ id: 'supplierTemplateManage.form.categoryLimitation' })}
name="categoryLimitation"
rules={[{ required: true, message: intl.formatMessage({ id: 'supplierTemplateManage.rule.categoryLimitation' }) }]}
>
<Radio.Group>
<Radio value={CategoryLimitationType.UNIVERSAL}>{CategoryLimitationTypeText[CategoryLimitationType.UNIVERSAL]}</Radio>
<Radio value={CategoryLimitationType.LIMITED}>{CategoryLimitationTypeText[CategoryLimitationType.LIMITED]}</Radio>
</Radio.Group>
</Form.Item>
</Col>
<Col span={8}>
<Form.Item
noStyle
shouldUpdate={(prevValues: FormValues, currentValues: FormValues) =>
prevValues.categoryLimitation !== currentValues.categoryLimitation
}
>
{({ getFieldValue }) => {
const categoryLimitation = getFieldValue('categoryLimitation');
return categoryLimitation === CategoryLimitationType.LIMITED ? (
<Form.Item
label={intl.formatMessage({ id: 'supplierTemplateManage.form.selectCategory' })}
name="categoryId"
rules={[{ required: true, message: intl.formatMessage({ id: 'supplierTemplateManage.rule.category' }) }]}
>
<CategorySelector value={categoryLimitation} multiple={false} />
</Form.Item>
) : null;
}}
</Form.Item>
</Col>
</Row>
<Row gutter={24}>
<Col span={8}>
<Form.Item
label={intl.formatMessage({ id: 'supplierTemplateManage.form.selectTemplate' })}
name="copyTemplateId"
>
<Select
placeholder={intl.formatMessage({ id: 'supplierTemplateManage.form.selectTemplate' })}
loading={templateList.length === 0}
onSelect={handleTemplateSelect}
>
{templateList.map(template => (
template.id ? (
<Option key={template.id} value={template.id}>
{template.templateName}
</Option>
) : null
))}
</Select>
</Form.Item>
</Col>
<Col span={8}>
<Form.Item
label={intl.formatMessage({ id: 'supplierTemplateManage.form.status' })}
name="status"
rules={[{ required: true }]}
>
<Radio.Group>
<Radio value={TemplateStatus.DRAFT}>{TemplateStatusText[TemplateStatus.DRAFT]}</Radio>
<Radio value={TemplateStatus.ENABLED}>{TemplateStatusText[TemplateStatus.ENABLED]}</Radio>
<Radio value={TemplateStatus.DISABLED}>{TemplateStatusText[TemplateStatus.DISABLED]}</Radio>
</Radio.Group>
</Form.Item>
</Col>
</Row>
<Row gutter={24}>
<Col span={8}>
<Form.Item
label={intl.formatMessage({ id: 'supplierTemplateManage.form.indicatorStMore' })}
name="indicatorStMore"
valuePropName="checked"
getValueProps={(value) => ({ checked: value === IndicatorAddOption.CAN_ADD })}
>
<Switch
checked={indicatorStMore === IndicatorAddOption.CAN_ADD}
onChange={(checked) => handleSwitchChange('indicatorStMore', checked)}
/>
</Form.Item>
</Col>
<Col span={8}>
<Form.Item
label={intl.formatMessage({ id: 'supplierTemplateManage.form.indicatorNdMore' })}
name="indicatorNdMore"
valuePropName="checked"
getValueProps={(value) => ({ checked: value === IndicatorAddOption.CAN_ADD })}
>
<Switch
checked={indicatorNdMore === IndicatorAddOption.CAN_ADD}
onChange={(checked) => handleSwitchChange('indicatorNdMore', checked)}
/>
</Form.Item>
</Col>
</Row>
</Card>
<Divider />
<Card title={intl.formatMessage({ id: 'supplierTemplateManage.card.indicatorInfo' })} bordered={false} className={styles.innerCard}>
<EvaluateTemplateTable
onChange={handleTemplateDataChange}
value={templateData}
/>
</Card>
</Spin>
<div className={styles.formActions}>
<Space>
<Button onClick={handleBack}>
{intl.formatMessage({ id: 'supplierTemplateManage.button.cancel' })}
</Button>
<Button type="primary" htmlType="submit" loading={loading} icon={<SaveOutlined />}>
{isEdit
? intl.formatMessage({ id: 'supplierTemplateManage.button.update' })
: intl.formatMessage({ id: 'supplierTemplateManage.button.save' })
}
</Button>
</Space>
</div>
</Form>
</Form>
</div>
);
};
// export default SupplierTemplateManageAdd;
// 将dva model中的状态映射到组件props
export default connect(({ breadcrumb }: { breadcrumb: BreadcrumbState }) => ({