list.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848
  1. <template>
  2. <el-container class="pro-container">
  3. <el-header class="search-box">
  4. <div class="search-box-item-title">
  5. <el-input v-model="searchForm.name" placeholder="请输入内容" clearable size="small"></el-input>
  6. </div>
  7. <div class="ml-10">
  8. <el-button type="primary" @click="searchChange" class="custom-primary-btn" size="small">查询</el-button>
  9. </div>
  10. <div class="ml-10">
  11. <el-select v-model="searchForm.type" placeholder="项目状态" style="width: 120px;" size="small">
  12. <el-option
  13. v-for="item in typeOptions"
  14. :key="item.value"
  15. :label="item.label"
  16. :value="item.value">
  17. </el-option>
  18. </el-select>
  19. </div>
  20. <div class="ml-10">
  21. <el-select v-model="searchForm.type" placeholder="默认排序" style="width: 120px;" size="small">
  22. <el-option
  23. v-for="item in sortOptions"
  24. :key="item.value"
  25. :label="item.label"
  26. :value="item.value">
  27. </el-option>
  28. </el-select>
  29. </div>
  30. <div class="ml-10">
  31. <el-button type="warning" icon="el-icon-sort" size="small" @click="sortPro">排序</el-button>
  32. </div>
  33. <div class="ml-10">
  34. <el-button type="warning" icon="el-icon-star-off" size="small" class="custom-primary-btn">收藏夹</el-button>
  35. </div>
  36. </el-header>
  37. <el-main class="main-box">
  38. <div class="project-list-container">
  39. <el-card class="project-card" shadow="hover" v-for="item in projectPageList"
  40. :key="item.id">
  41. <div class="project-top">
  42. <div class="project-tag">
  43. <el-tag
  44. size="small"
  45. v-for="item in tagItems"
  46. :key="item.label"
  47. :type="item.type"
  48. effect="dark"
  49. class="mr-3 custom-ellipse-tag"
  50. :class="`custom-tag-type-${item.type}`"
  51. >
  52. <i class=" el-icon-success"></i>
  53. {{ item.label }}
  54. </el-tag>
  55. </div>
  56. <div class="project-like">
  57. <i class="el-icon-star-on" v-if="item.isLiked" @click="toggleLike(item)"></i>
  58. <i class="el-icon-star-off" v-else></i>
  59. </div>
  60. </div>
  61. <div class="project-title" >
  62. <el-tooltip
  63. v-if="item.projectAlias.length > 20"
  64. :content="item.projectAlias"
  65. placement="top"
  66. >
  67. <span>{{ item.projectAlias }}</span>
  68. </el-tooltip>
  69. <span v-else>{{ item.projectAlias }}</span>
  70. </div>
  71. <div class="project-info">
  72. <div><span class="info-label"><i class="el-icon-user"></i>负责人:</span>李田</div>
  73. <div><span class="info-label"><i class="el-icon-edit-outline"></i>电签类别:</span>安心签</div>
  74. <div><span class="info-label"><i class="el-icon-coordinate"></i>电签方式:</span>流程审批</div>
  75. </div>
  76. <div class="project-actions">
  77. <el-link type="primary" size="small" @click="projectClick(item)">
  78. 查看详情 <i class="el-icon-right"></i>
  79. </el-link>
  80. <el-tag size="small" type="danger" class="custom-ellipse-tag1" >进行中</el-tag>
  81. </div>
  82. </el-card>
  83. <!-- 其他项目卡片... -->
  84. </div>
  85. </el-main>
  86. <el-footer class="footer-box">
  87. <el-pagination
  88. layout="prev, pager, next"
  89. @current-change="handleCurrentChange"
  90. :current-page.sync="page.currentPage"
  91. :total="page.total"
  92. :page-size="page.pageSize"
  93. class="transparent-pagination"
  94. >
  95. </el-pagination>
  96. </el-footer>
  97. <!-- 项目信息 -->
  98. <el-dialog
  99. class="project-dialog"
  100. :visible.sync="projectVisible"
  101. width="65%"
  102. append-to-body
  103. >
  104. <span slot="title">
  105. <i class="el-icon-s-cooperation" style="color: #2550A2;"></i>项目信息
  106. </span>
  107. <div class="mg-b-15">
  108. <el-tag size="small" type="danger" class="custom-ellipse-tag1" >进行中</el-tag>
  109. <span>{{curProjiect.projectName}}</span>
  110. </div>
  111. <div class="mg-b-15">
  112. <span>项目配置</span>
  113. </div>
  114. <div class="flex jc-sb pd-b-10">
  115. <div >
  116. <el-button
  117. v-for="wbsBtn in wbsButtons"
  118. :key="wbsBtn.type"
  119. :style="wbsBtn.style"
  120. size="small"
  121. @click="handleWbsClick(wbsBtn.type)"
  122. >
  123. <i :class="wbsBtn.icon"></i> {{ wbsBtn.label }}
  124. </el-button>
  125. <el-button
  126. size="small"
  127. @click="editProject"
  128. style=" background-color: #2550A2;border-color: #2550A2 ;color: white;"
  129. ><i class="el-icon-edit"></i> 编辑项目信息</el-button>
  130. <el-button
  131. size="small"
  132. @click="addContract"
  133. style=" background-color: #2550A2;border-color: #2550A2 ;color: white;"
  134. ><i class="el-icon-circle-plus"></i> 创建新合同段</el-button>
  135. <el-button
  136. size="small"
  137. @click="sortContract"
  138. style=" background-color: #FF7D43;border-color: #FF7D43 ;color: white;"
  139. ><i class="el-icon-sort"></i> 合同段排序</el-button>
  140. <el-button
  141. size="small"
  142. @click="dellProject"
  143. type="danger"
  144. ><i class="el-icon-delete"></i> 删除项目</el-button>
  145. </div>
  146. </div>
  147. <div
  148. class="mt-15"
  149. v-if="contractList.length > 0"
  150. >
  151. <el-table
  152. :data="contractList"
  153. height="400"
  154. style="width: 100%"
  155. header-cell-class-name="custom-header"
  156. >
  157. <el-table-column
  158. prop="contractName"
  159. label="合同段名称"
  160. >
  161. </el-table-column>
  162. <el-table-column
  163. prop="contractNumber"
  164. label="合同段编号"
  165. >
  166. </el-table-column>
  167. <el-table-column
  168. prop="contractType"
  169. label="合同段类型"
  170. width="100px"
  171. >
  172. <template slot-scope="scope">
  173. <el-tag size="small" type="danger" class="custom-ellipse-tag1" >{{ scope.row.contractType===1?'施工':scope.row.contractType===2?'监理':'指挥' }}</el-tag>
  174. </template>
  175. </el-table-column>
  176. <el-table-column
  177. prop=""
  178. label="合同段权限">
  179. </el-table-column>
  180. <el-table-column
  181. width="180px"
  182. prop="address"
  183. label="操作">
  184. <template slot-scope="scope">
  185. <el-link
  186. type="primary"
  187. size="mini"
  188. @click="editContract(scope.row)">编辑合同段信息</el-link>
  189. <el-link
  190. size="mini"
  191. type="danger"
  192. class="ml-10"
  193. @click="delContract(scope.row,sortOptionscope.$index)">删除</el-link>
  194. </template>
  195. </el-table-column>
  196. </el-table>
  197. </div>
  198. <div
  199. class="text-align-c pd-t-20"
  200. v-else
  201. >
  202. 暂无合同段,请先创建合同段
  203. </div>
  204. </el-dialog>
  205. <!-- 合同段排序弹窗 -->
  206. <ContractSort
  207. ref="contractSortRef"
  208. :title="sortTitle"
  209. @confirm="handleSortConfirm"
  210. />
  211. </el-container>
  212. </template>
  213. <script>
  214. import { getProjectList, removeProject } from "@/api/manager/projectinfo";
  215. import { findContractByProjectId, removeContractInfo } from "@/api/manager/contractinfo";
  216. // import {getDictionary} from "@/api/system/dict";
  217. import { mapGetters } from "vuex";
  218. import { getStore, setStore } from "@/util/store";
  219. import ContractSort from './ContractSort.vue'
  220. export default {
  221. data () {
  222. return {
  223. showTooltip: false, // 控制 tooltip 显示
  224. searchForm: {
  225. name: ''
  226. },
  227. typeOptions:[
  228. { value: '1', label: '未开始' },
  229. { value: '2', label: '配置中' },
  230. { value: '3', label: '进行中' },
  231. { value: '4', label: '已完成' },
  232. ],
  233. sortOptions:[
  234. { value: '1', label: '收藏优先' },
  235. { value: '2', label: '创建时间' },
  236. { value: '3', label: '我负责的' },
  237. ],
  238. tagItems: [
  239. { type: '1', label: '质检' },
  240. { type: '2', label: '试验' },
  241. { type: '3', label: '日志' },
  242. { type: '4', label: '计量' },
  243. { type: '5', label: '征拆' }
  244. ],
  245. projectId: '',
  246. curProjiect: {},
  247. projectList: [],
  248. projectPageList: [],
  249. projectVisible: false,
  250. contractList: [],
  251. page: {
  252. currentPage: 1,
  253. pageSize: 12,
  254. total: 0
  255. },
  256. wbsButtons: [
  257. {
  258. label: '质检WBS',
  259. type: 'quality',
  260. style: {
  261. backgroundColor: '#3B83F6',
  262. borderColor: '#3B83F6',
  263. color: 'white'
  264. },
  265. icon: 'el-icon-s-order'
  266. },
  267. {
  268. label: '试验WBS',
  269. type: 'test',
  270. style: {
  271. backgroundColor: '#A856F8',
  272. borderColor: '#A856F8',
  273. color: 'white'
  274. },
  275. icon: 'el-icon-guide'
  276. },
  277. {
  278. label: '日志WBS',
  279. type: 'log',
  280. style: {
  281. backgroundColor: '#6367F1',
  282. borderColor: '#6367F1',
  283. color: 'white'
  284. },
  285. icon: 'el-icon-notebook-1'
  286. },
  287. {
  288. label: '计量WBS',
  289. type: 'measure',
  290. style: {
  291. backgroundColor: '#E7B214',
  292. borderColor: '#E7B214',
  293. color: 'white'
  294. },
  295. icon: 'el-icon-files'
  296. },
  297. {
  298. label: '征拆WBS',
  299. type: 'split',
  300. style: {
  301. backgroundColor: '#EC489A',
  302. borderColor: '#EC489A',
  303. color: 'white'
  304. },
  305. icon: 'el-icon-s-order'
  306. }
  307. ],
  308. sortContractVisible: false, // 合同段排序弹窗
  309. sortContractList: [],
  310. sortTitle: '合同段排序',
  311. }
  312. },
  313. computed: {
  314. ...mapGetters(["userInfo"]),
  315. },
  316. components: {
  317. ContractSort
  318. },
  319. created () {
  320. this.init();
  321. //console.log(this.userInfo)
  322. },
  323. methods: {
  324. init () {
  325. this.getProjectList();
  326. this.getProjectPageList();
  327. },
  328. searchChange () {
  329. this.page.currentPage = 1;
  330. this.getProjectPageList();
  331. },
  332. handleWbsClick(type) {
  333. switch (type) {
  334. case 'quality':
  335. this.editTree();
  336. break;
  337. case 'test':
  338. this.testTree();
  339. break;
  340. case 'log':
  341. this.editLogTree();
  342. break;
  343. case 'measure':
  344. this.measureTree();
  345. break;
  346. case 'split':
  347. this.splitTree();
  348. break;
  349. }
  350. },
  351. getProjectList () {
  352. getProjectList(1, 999).then((res) => {
  353. this.projectList = res.data.data.records;
  354. })
  355. },
  356. getProjectPageList () {
  357. getProjectList(this.page.currentPage, this.page.pageSize).then((res) => {
  358. this.projectPageList = res.data.data.records;
  359. this.page.total = res.data.data.total;
  360. })
  361. },
  362. projectClick (item) {
  363. this.curProjiect = item;
  364. findContractByProjectId(this.curProjiect.id).then((res) => {
  365. this.contractList = res.data.data;
  366. })
  367. this.projectVisible = true;
  368. },
  369. handleCurrentChange (val) {
  370. this.getProjectPageList();
  371. this.page.currentPage = val;
  372. },
  373. projectChange (id) {
  374. for (let i = 0; i < this.projectList.length; i++) {
  375. if (id == this.projectList[i].id) {
  376. this.curProjiect = this.projectList[i];
  377. findContractByProjectId(this.curProjiect.id).then((res) => {
  378. this.contractList = res.data.data;
  379. })
  380. this.projectVisible = true;
  381. return;
  382. }
  383. }
  384. },
  385. addContract () {
  386. this.$router.push({
  387. path: '/contract/detail',
  388. query: { pid: this.curProjiect.id }
  389. });
  390. },
  391. editContract (item) {
  392. this.$router.push({
  393. path: '/contract/detail1',
  394. query: {
  395. pid: item.pid,
  396. cid: item.id,
  397. contractType: item.contractType
  398. }
  399. });
  400. },
  401. editProject () {
  402. this.$router.push({
  403. path: '/manager/projectinfo/detail',
  404. query: {
  405. id: this.curProjiect.id
  406. }
  407. });
  408. },
  409. contractDetail (item, type, contractType) {
  410. this.$router.push({
  411. path: '/contract/detail',
  412. query: {
  413. pid: item.pid,
  414. cid: item.id,
  415. type,
  416. contractType
  417. }
  418. })
  419. },
  420. testTree () {
  421. this.$router.push({
  422. path: '/project/tree',
  423. query: {
  424. pid: this.curProjiect.id,
  425. wbsid: this.curProjiect.referenceWbsTemplateIdTrial,
  426. projectName:this.curProjiect.projectName,
  427. type: 2
  428. }
  429. });
  430. },
  431. splitTree () {
  432. this.$router.push({
  433. path: '/project/tree',
  434. query: {
  435. pid: this.curProjiect.id,
  436. wbsid: this.curProjiect.referenceWbsTemplateIdLar,
  437. projectName:this.curProjiect.projectName,
  438. type: 5
  439. }
  440. });
  441. },
  442. measureTree(){
  443. this.$router.push({
  444. path: '/project/tree',
  445. query: {
  446. pid: this.curProjiect.id,
  447. wbsid: this.curProjiect.referenceWbsTemplateIdMeter,
  448. projectName:this.curProjiect.projectName,
  449. type: 3
  450. }
  451. });
  452. },
  453. editTree () {
  454. this.$router.push({
  455. path: '/project/tree',
  456. query: {
  457. pid: this.curProjiect.id,
  458. wbsid: this.curProjiect.referenceWbsTemplateId,
  459. projectName:this.curProjiect.projectName
  460. }
  461. });
  462. },
  463. editLogTree () {
  464. this.$router.push({
  465. path: '/project/tree',
  466. query: {
  467. pid: this.curProjiect.id,
  468. wbsid: this.curProjiect.referenceLogWbsTemplateId,
  469. projectName:this.curProjiect.projectName,
  470. type: 4
  471. }
  472. });
  473. },
  474. delContract (item, index) {
  475. this.$confirm('是否删除【' + item.contractName + '】?', '提示', {
  476. confirmButtonText: '确定',
  477. cancelButtonText: '取消',
  478. type: 'warning'
  479. }).then(() => {
  480. removeContractInfo(item.id).then(() => {
  481. this.$message({
  482. type: "success",
  483. message: "删除成功!"
  484. });
  485. this.contractList.splice(index, 1);
  486. })
  487. })
  488. },
  489. dellProject () {
  490. if (this.contractList.length) {
  491. this.$message({
  492. type: "warning",
  493. message: "只能删除下面无合同段的项目!"
  494. });
  495. return;
  496. }
  497. this.$confirm('是否删除【' + this.curProjiect.projectName + '】?', '提示', {
  498. confirmButtonText: '确定',
  499. cancelButtonText: '取消',
  500. type: 'warning'
  501. }).then(() => {
  502. removeProject(this.curProjiect.id).then(() => {
  503. this.$message({
  504. type: "success",
  505. message: "删除成功!"
  506. });
  507. //删除后当前列表为空,且不是第一页,往前翻一页
  508. if(this.projectPageList.length == 1 && this.page.currentPage >1){
  509. this.page.currentPage--;
  510. }
  511. this.getProjectPageList();
  512. this.projectVisible = false;
  513. })
  514. })
  515. },
  516. getFont (type) {
  517. if (type == 1) {
  518. return '施';
  519. } else if (type == 2) {
  520. return '监';
  521. } else if (type == 3) {
  522. return '业';
  523. }
  524. return '';
  525. },
  526. getAvatarBg (type) {
  527. if (type == 1) {
  528. return { 'abg1': true };
  529. } else if (type == 2) {
  530. return { 'abg2': true };
  531. } else if (type == 3) {
  532. return { 'abg3': true };
  533. }
  534. return {};
  535. },
  536. getBg (index) {
  537. let num = Math.trunc(index / 4);
  538. if ((num % 2) === 0) {//判定条件余数为0时为偶数
  539. return {
  540. 'bg1': true
  541. }
  542. } else {
  543. return {
  544. 'bg2': true
  545. }
  546. }
  547. },
  548. wbsManage () {//wbs树管理按钮
  549. this.$router.push('/manager/privateWBS/' + 111)
  550. },
  551. //同步
  552. syncLedger () {
  553. this.$router.push('/manager/projectinfo/ledger' )
  554. },
  555. toggleLike(item){
  556. item.isLiked = !item.isLiked;
  557. },
  558. //合同段排序
  559. sortContract(){
  560. // this.sortContractVisible = true;
  561. this.sortContractList = JSON.parse(JSON.stringify(this.contractList));
  562. this.sortTitle = '合同段排序';
  563. this.$nextTick(() => {
  564. this.$refs.contractSortRef.show(this.sortContractList);
  565. });
  566. },
  567. // 处理排序确认
  568. handleSortConfirm(sortedList) {
  569. // 这里处理排序后的数据
  570. console.log('排序后的列表:', sortedList);
  571. // TODO: 调用接口保存排序结果
  572. this.contractList = [...sortedList];
  573. this.$message.success('排序成功');
  574. },
  575. sortPro(){
  576. this.sortContractList = JSON.parse(JSON.stringify(this.projectList));
  577. this.sortTitle = '项目排序';
  578. this.$nextTick(() => {
  579. this.$refs.contractSortRef.show(this.sortContractList);
  580. });
  581. }
  582. }
  583. };
  584. </script>
  585. <style scoped lang="scss">
  586. .pro-container {
  587. height: 100%;
  588. width: 100%;
  589. display: flex;
  590. flex-direction: column;
  591. .search-box {
  592. // padding: 0 !important; /* 取消内边距 */
  593. height: auto !important; /* 取消固定高度 */
  594. min-height: auto !important; /* 取消最小高度 */
  595. display: flex;
  596. align-items: center; /* 垂直居中 */
  597. flex-wrap: wrap; /* 允许换行 */
  598. .search-box-item-title {
  599. flex: 1; /* 输入框占据剩余空间 */
  600. min-width: 200px; /* 最小宽度 */
  601. }
  602. .ml-10 {
  603. margin-left: 10px;
  604. }
  605. }
  606. .footer-box{
  607. display: flex;
  608. align-items: center; /* 垂直居中 */
  609. justify-content: center;
  610. }
  611. }
  612. /* 自定义按钮样式 */
  613. .custom-primary-btn {
  614. background-color: #2550A2 !important;
  615. border-color: #2550A2 !important;
  616. }
  617. /* 项目列表容器样式 */
  618. .project-list-container {
  619. display: grid;
  620. grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));
  621. gap: 20px;
  622. padding: 15px;
  623. }
  624. /* 项目卡片样式 */
  625. .project-card {
  626. cursor: pointer;
  627. transition: all 0.3s ease;
  628. border-radius: 8px;
  629. }
  630. .project-card:hover {
  631. transform: translateY(-5px);
  632. box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);
  633. }
  634. .project-top{
  635. display: flex;
  636. justify-content: space-between; /* 左右对齐 */
  637. align-items: center; /* 垂直居中 */
  638. margin-bottom: 10px;
  639. }
  640. .project-title {
  641. font-size: 16px;
  642. font-weight: bold;
  643. color: #333;
  644. white-space: nowrap;
  645. overflow: hidden;
  646. text-overflow: ellipsis;
  647. width: 100%; /* 确保宽度限制 */
  648. }
  649. .project-info {
  650. font-size: 14px;
  651. color: black;
  652. }
  653. .info-label {
  654. font-weight: bold;
  655. color: black;
  656. display: inline-block;
  657. margin-bottom: 5px;
  658. }
  659. .project-actions{
  660. display: flex;
  661. align-items: center;
  662. justify-content: space-between;
  663. }
  664. /* 搜索框样式 */
  665. .search-box {
  666. display: flex;
  667. align-items: center;
  668. padding: 15px;
  669. background-color: #f5f7fa;
  670. border-bottom: 1px solid #e6e6e6;
  671. }
  672. .ml-10 {
  673. margin-left: 10px;
  674. }
  675. .mr-5 {
  676. margin-right: 5px;
  677. }
  678. .mr-3 {
  679. margin-right: 3px;
  680. }
  681. .mt-15 {
  682. margin-top: 15px;
  683. }
  684. .mg-b-15 {
  685. margin-bottom: 15px;
  686. }
  687. /* 更彻底的透明效果 */
  688. </style>
  689. <style lang="scss">
  690. /* 完全透明分页样式 */
  691. .footer-box {
  692. display: flex;
  693. justify-content: center;
  694. align-items: center;
  695. padding: 10px 0;
  696. background: transparent;
  697. }
  698. /* 移除所有按钮和页码的背景色 */
  699. .transparent-pagination .btn-prev,
  700. .transparent-pagination .btn-next,
  701. .transparent-pagination .el-pager li {
  702. background: transparent !important;
  703. border: none !important;
  704. }
  705. /* 移除鼠标悬停时的背景色 */
  706. .transparent-pagination .btn-prev:hover,
  707. .transparent-pagination .btn-next:hover,
  708. .transparent-pagination .el-pager li:hover {
  709. background: transparent !important;
  710. }
  711. /* 移除当前选中页的背景色,仅保留文字颜色 */
  712. .transparent-pagination .el-pager li.active {
  713. background: transparent !important;
  714. color: #409EFF; /* 选中页的文字颜色 */
  715. }
  716. /* 移除整个分页组件的背景 */
  717. .transparent-pagination {
  718. background: transparent !important;
  719. }
  720. .custom-ellipse-tag {
  721. border-radius: 15px !important;
  722. padding: 0 8px !important;
  723. margin-right: 8px !important;
  724. height: 24px;
  725. line-height: 24px;
  726. display: inline-flex;
  727. align-items: center;
  728. color: white !important; /* 文字颜色统一为白色 */
  729. border: none !important;
  730. }
  731. .custom-ellipse-tag1{
  732. border-radius: 15px !important;
  733. padding: 0 8px !important;
  734. margin-right: 8px !important;
  735. height: 24px;
  736. line-height: 24px;
  737. display: inline-flex;
  738. align-items: center;
  739. border: none !important;
  740. }
  741. /* 根据 type 设置背景色 */
  742. .custom-tag-type-1 {
  743. background-color: #3B83F6 !important; /* 质检 - 蓝色 */
  744. }
  745. .custom-tag-type-2 {
  746. background-color: #A856F8 !important; /* 试验 - 紫色 */
  747. }
  748. .custom-tag-type-3 {
  749. background-color: #6367F1 !important; /* 日志 - 靛蓝 */
  750. }
  751. .custom-tag-type-4 {
  752. background-color: #E7B214 !important; /* 计量 - 黄色 */
  753. }
  754. .custom-tag-type-5 {
  755. background-color: #EC489A !important; /* 征拆 - 粉色 */
  756. }
  757. /* 图标样式 */
  758. .custom-ellipse-tag .el-icon-success {
  759. margin-right: 4px;
  760. font-size: 12px;
  761. }
  762. /* 图标样式 */
  763. .custom-ellipse-tag .el-icon-success {
  764. margin-right: 4px;
  765. font-size: 12px;
  766. }
  767. .project-dialog {
  768. .el-dialog__body {
  769. color: black;
  770. padding: 10px 20px 20px 20px !important;
  771. }
  772. .el-dialog__header {
  773. border-bottom: 1px solid #e6e6e6;
  774. }
  775. }
  776. .custom-header {
  777. background-color: #F2F3F5 !important;
  778. }
  779. </style>