evaluationStartFrom.vue 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763
  1. <template>
  2. <div class="startFrom">
  3. <el-dialog title="考评启动详情" v-model="dialogVisible" :fullscreen="true" :close-on-click-modal="false">
  4. <div class="startDetail">
  5. <p class="starttitleSty">单据信息:</p>
  6. <el-row class="danjuMsg">
  7. <el-col :span="6">
  8. <div class="danjuMsg_data">
  9. <span class="data_tit">业务编号:</span>
  10. <span>{{receiptMsg.code}}</span>
  11. </div>
  12. <div class="danjuMsg_data">
  13. <span class="data_tit">创建日期:</span>
  14. <span>{{receiptMsg.createDate}}</span>
  15. </div>
  16. </el-col>
  17. <el-col :span="6">
  18. <div class="danjuMsg_data">
  19. <span class="data_tit">业务简述:</span>
  20. <span>{{receiptMsg.des}}</span>
  21. </div>
  22. <div class="danjuMsg_data">
  23. <span class="data_tit">业务类别:</span>
  24. <span>{{receiptMsg.type}}</span>
  25. </div>
  26. </el-col>
  27. <el-col :span="6">
  28. <div class="danjuMsg_data">
  29. <span class="data_tit">流程状态:</span>
  30. <span>{{receiptMsg.stage}}</span>
  31. </div>
  32. <div class="danjuMsg_data">
  33. <span class="data_tit">年度:</span>
  34. <span>{{receiptMsg.year}}</span>
  35. </div>
  36. </el-col>
  37. <el-col :span="6">
  38. <div class="danjuMsg_data">
  39. <span class="data_tit">创建人:</span>
  40. <span>{{receiptMsg.createName}}</span>
  41. </div>
  42. <div class="danjuMsg_data">
  43. <span class="data_tit">单据状态:</span>
  44. <span>{{receiptMsg.recStage}}</span>
  45. </div>
  46. </el-col>
  47. </el-row>
  48. <div class="detaTableBtns">
  49. <div class="tableBtn add" @click="addTableDetail" v-if="activeName === 'second'">
  50. <img :src="addIcon" alt="">
  51. <span>新增</span>
  52. </div>
  53. <div class="tableBtn save" @click="saveDetail" v-if="$utils.havePurview('evalStart:twoLevel:save')">
  54. <img :src="saveIcon" alt="">
  55. <span>保存</span>
  56. </div>
  57. <!-- <div class="tableBtn edit">
  58. <img :src="editIcon" alt="">
  59. <span>新增</span>
  60. </div> -->
  61. <div class="tableBtn import" @click="handleImport">
  62. <img :src="importIcon" alt="">
  63. <span>导入</span>
  64. </div>
  65. <div class="tableBtn export" @click="handleExport">
  66. <img :src="exportIcon" alt="">
  67. <span>导出</span>
  68. </div>
  69. </div>
  70. <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
  71. <el-tab-pane label="考评指标项内容" name="first">
  72. <el-table :data="quantifiedList.slice((pageLeft.currentPage-1)*pageLeft.pagesize, pageLeft.currentPage*pageLeft.pagesize)" style="width: 100%" @select="rowClick" @select-all="rowClick">
  73. <el-table-column type="selection" label="操作" align="center"></el-table-column>
  74. <el-table-column type="index" label="序号" width="80" />
  75. <el-table-column label="单位名称" prop="organizationShortName" width="300" />
  76. <el-table-column label="指标分类" prop="typeName" />
  77. <el-table-column label="业务阶段" prop="stageName" />
  78. <el-table-column label="业务属性" prop="sectionName" />
  79. <el-table-column label="指标名称" prop="indicatorName" />
  80. <el-table-column label="填报部门" prop="deptName" width="260" />
  81. <el-table-column label="目标值">
  82. <template #default="scope">
  83. <el-input-number v-model="scope.row.quantifiedValue"
  84. :precision="2" :step="0.1" :min="0" :disabled="!scope.row.updateMark" />
  85. </template>
  86. </el-table-column>
  87. <el-table-column label="单位" prop="unit" />
  88. <el-table-column label="审核状态">
  89. <template #default="scope">
  90. <el-select v-model="scope.row.state" placeholder="请选择审核状态" :disabled="!scope.row.updateMark">
  91. <el-option
  92. v-for="item in statusData"
  93. :key="item.id"
  94. :label="item.name"
  95. :value="item.id">
  96. </el-option>
  97. </el-select>
  98. </template>
  99. </el-table-column>
  100. </el-table>
  101. <el-pagination
  102. @current-change="handleCurrentChangeLeft"
  103. :current-page="pageLeft.currentPage"
  104. :page-size="pageLeft.pagesize"
  105. layout="total, prev, pager, next, jumper"
  106. :total="pageLeft.total">
  107. </el-pagination>
  108. </el-tab-pane>
  109. <el-tab-pane label="考评评价指标内容" name="second">
  110. <el-table :data="nonQuantifiedList.slice((pageRight.currentPage-1)*pageRight.pagesize, pageRight.currentPage*pageRight.pagesize)" style="width: 100%">
  111. <el-table-column type="index" label="序号" width="80" />
  112. <el-table-column label="单位名称" prop="organizationShortName" width="300">
  113. <template #default="scope">
  114. <el-select v-model="scope.row.organizationShortName" placeholder="请选择单位名称"
  115. :disabled="!scope.row.showInput"
  116. @change="changeOrgZa">
  117. <el-option
  118. v-for="item in orgruleData"
  119. :key="item.id"
  120. :label="item.shortName"
  121. :value="item.id">
  122. </el-option>
  123. </el-select>
  124. </template>
  125. </el-table-column>
  126. <el-table-column label="指标分类" prop="typeName">
  127. <template #default="scope">
  128. <el-select v-model="scope.row.typeName" :disabled="!scope.row.showInput" placeholder="请选择指标分类">
  129. <el-option
  130. v-for="item in indicatorTypeData"
  131. :key="item.id"
  132. :label="item.typeName"
  133. :value="item.id">
  134. </el-option>
  135. </el-select>
  136. </template>
  137. </el-table-column>
  138. <el-table-column label="业务阶段" prop="stageName">
  139. <template #default="scope">
  140. <el-select v-model="scope.row.stageName" placeholder="请选择业务阶段"
  141. :disabled="!scope.row.showInput"
  142. @change="(val)=>changeIndic(val, scope.row)">
  143. <el-option
  144. v-for="item in stageData"
  145. :key="item.id"
  146. :label="item.stageName"
  147. :value="item.id">
  148. </el-option>
  149. </el-select>
  150. </template>
  151. </el-table-column>
  152. <el-table-column label="业务属性" prop="sectionName">
  153. <template #default="scope">
  154. <el-select v-model="scope.row.sectionName" placeholder="请选择业务阶段"
  155. :disabled="!scope.row.showInput"
  156. @change="(val)=>changeIndic(val, scope.row)">
  157. <el-option
  158. v-for="item in sectionNameArr"
  159. :key="item.id"
  160. :label="item.secName"
  161. :value="item.id">
  162. </el-option>
  163. </el-select>
  164. </template>
  165. </el-table-column>
  166. <el-table-column label="指标名称" prop="childName">
  167. <template #default="scope">
  168. <el-select v-model="scope.row.childName" placeholder="请选择业务阶段"
  169. :disabled="!scope.row.showInput"
  170. @change="changeDept">
  171. <el-option
  172. v-for="item in indicItemoptions"
  173. :key="item.id"
  174. :label="item.indicatorName"
  175. :value="item.id">
  176. </el-option>
  177. </el-select>
  178. </template>
  179. </el-table-column>
  180. <el-table-column label="填报部门" prop="deptName" width="260">
  181. <template #default="scope">
  182. <el-select v-model="scope.row.deptName" placeholder="请选择业务阶段" :disabled="!scope.row.showInput">
  183. <el-option
  184. v-for="item in deptNameArr"
  185. :key="item.id"
  186. :label="item.deptName"
  187. :value="item.id">
  188. </el-option>
  189. </el-select>
  190. </template>
  191. </el-table-column>
  192. <el-table-column label="值">
  193. <template #default="scope">
  194. <el-input v-model="scope.row.nonQuantifiedValue" :disabled="!scope.row.updateMark" />
  195. </template>
  196. </el-table-column>
  197. <el-table-column label="审核状态">
  198. <template #default="scope">
  199. <el-select v-model="scope.row.state" placeholder="请选择审核状态" :disabled="!scope.row.updateMark">
  200. <el-option
  201. v-for="item in statusData"
  202. :key="item.id"
  203. :label="item.name"
  204. :value="item.id">
  205. </el-option>
  206. </el-select>
  207. </template>
  208. </el-table-column>
  209. </el-table>
  210. <el-pagination
  211. @current-change="handleCurrentChangeRight"
  212. :current-page="pageRight.currentPage"
  213. :page-size="pageRight.pagesize"
  214. layout="total, prev, pager, next, jumper"
  215. :total="pageRight.total">
  216. </el-pagination>
  217. </el-tab-pane>
  218. </el-tabs>
  219. </div>
  220. <template #footer>
  221. <span class="dialog-footer">
  222. <el-button type="primary" @click="dialogVisible = false">取 消</el-button>
  223. </span>
  224. </template>
  225. </el-dialog>
  226. <import-dailog ref="importPage" @successImport="successImport" @importLoading="importLoading"></import-dailog>
  227. </div>
  228. </template>
  229. <script>
  230. import importDailog from '../importPage/importDailog.vue'
  231. import {apiGetdeptresponDetail,apiGetindicatorsaveBatchDto, apiGetOrganizationRule, apiPostIsdoAction,
  232. apiGetindicatorListAll, apiGetbinstageList, apiGetIndicatorTypeList} from '../../api/api'
  233. import ExcelJS from 'exceljs'
  234. import fileSave from 'file-saver'
  235. import addIcon from '../../assets/btnIcon/add.png'
  236. import saveIcon from '../../assets/btnIcon/save.png'
  237. import editIcon from '../../assets/btnIcon/edit.png'
  238. import deleteIcon from '../../assets/btnIcon/delete.png'
  239. import exportIcon from '../../assets/btnIcon/export.png'
  240. import importIcon from '../../assets/btnIcon/import.png'
  241. export default {
  242. components: {
  243. importDailog
  244. },
  245. data() {
  246. return {
  247. dialogVisible: false,
  248. activeName: 'first',
  249. quantifiedList: [],
  250. nonQuantifiedList: [],
  251. changeDateSelect: [],
  252. receiptMsg: {
  253. code: '',
  254. des: '',
  255. stage: '',
  256. createName: '',
  257. createDate: '',
  258. type: '',
  259. year: '',
  260. recStage: ''
  261. },
  262. addIcon: addIcon,
  263. saveIcon: saveIcon,
  264. editIcon: editIcon,
  265. deleteIcon: deleteIcon,
  266. exportIcon: exportIcon,
  267. importIcon: importIcon,
  268. rowMsg: {},
  269. orgruleData: [],
  270. indicatorTypeData: [],
  271. stageData: [],
  272. indicItemoptions: [],
  273. sectionNameArr: [],
  274. deptNameArr: [],
  275. statusData: [],
  276. pageLeft:{
  277. pagesize: 15,
  278. currentPage: 1,
  279. total: 0
  280. },
  281. pageRight:{
  282. pagesize: 15,
  283. currentPage: 1,
  284. total: 0
  285. },
  286. }
  287. },
  288. created() {
  289. this.statusData = [
  290. {
  291. name: '已完成',
  292. id: '1'
  293. },
  294. {
  295. name: '待审核',
  296. id: '0'
  297. },
  298. {
  299. name: '未开始',
  300. id: '-1'
  301. }
  302. ]
  303. },
  304. methods: {
  305. init(row) {
  306. this.dialogVisible = true
  307. this.activeName = 'first'
  308. this.receiptMsg = {
  309. code: row.responsibilityCode,
  310. des: row.des,
  311. stage: row.stage,
  312. createName: row.createName,
  313. createDate: row.createTime,
  314. type: row.checkCycle === 'YDKP'?'月度考评':row.checkCycle === 'JDKP'?'季度考评':'年度考评',
  315. year: row.year,
  316. recStage: '有效'
  317. }
  318. this.getDetails(row.id)
  319. this.getOrgRule(row)
  320. this.getindList()
  321. this.rowMsg = row
  322. },
  323. // 考评评价指标内容
  324. getOrgRule(row) {
  325. let that = this
  326. let params = {
  327. id: row.id,
  328. type: 'mb'
  329. }
  330. apiGetOrganizationRule(params).then(datas =>{
  331. if (datas && datas.data) {
  332. that.orgruleData = datas.data
  333. }
  334. })
  335. },
  336. getindList() {
  337. let that = this
  338. let params = {
  339. type: 2
  340. }
  341. apiGetbinstageList(params).then(datas =>{
  342. if (datas && datas.data) {
  343. that.stageData = datas.data
  344. }
  345. })
  346. apiGetIndicatorTypeList(params).then(datas =>{
  347. if (datas && datas.data) {
  348. that.indicatorTypeData = datas.data
  349. }
  350. })
  351. },
  352. getIndListAll(row) {
  353. let that = this
  354. let params = {
  355. binSection: row.sectionName,
  356. binStage: row.stageName
  357. }
  358. apiGetindicatorListAll(params).then(datas =>{
  359. if (datas && datas.data) {
  360. that.indicItemoptions = datas.data
  361. }
  362. })
  363. },
  364. changeIndic(val, row) {
  365. if (row.stageName !== '' && row.sectionName !== '') {
  366. this.getIndListAll(row)
  367. }
  368. },
  369. changeOrgZa(val) {
  370. this.sectionNameArr = []
  371. this.orgruleData.forEach(item =>{
  372. if (item.id === val) {
  373. let obj = {
  374. id: item.binSection,
  375. secName: item.binSectionName
  376. }
  377. this.sectionNameArr.push(obj)
  378. }
  379. })
  380. },
  381. changeDept(val) {
  382. this.deptNameArr = []
  383. this.indicItemoptions.forEach(item =>{
  384. if (item.id === val) {
  385. let obj = {
  386. id: item.dept,
  387. deptName: item.deptName
  388. }
  389. this.deptNameArr.push(obj)
  390. }
  391. })
  392. },
  393. handleClick() {
  394. this.changeDateSelect = []
  395. },
  396. rowClick(selection, row) {
  397. this.changeDateSelect = selection
  398. },
  399. handleCurrentChangeLeft(val) {
  400. this.pageLeft.currentPage = val
  401. },
  402. handleCurrentChangeRight(val) {
  403. this.pageRight.currentPage = val
  404. },
  405. //获取详情
  406. getDetails(id) {
  407. let that = this
  408. that.quantifiedList = []
  409. that.nonQuantifiedList = []
  410. let params = {
  411. deptResponsibilityIds: id
  412. }
  413. apiGetdeptresponDetail(params).then(datas =>{
  414. if (datas && datas.data) {
  415. that.quantifiedList = datas.data.quantifiedList
  416. that.pageLeft.total = datas.data.quantifiedList.length
  417. if (datas.data.nonQuantifiedList.length>0) {
  418. datas.data.nonQuantifiedList.forEach(it =>{
  419. it.childName = it.indicatorName //指标id
  420. // nonarr.push(obj)
  421. })
  422. }
  423. that.nonQuantifiedList = datas.data.nonQuantifiedList.length>0?datas.data.nonQuantifiedList:[]
  424. that.pageRight.total = datas.data.nonQuantifiedList.length
  425. }
  426. })
  427. },
  428. addTableDetail() {
  429. let obj = {
  430. showInput: true,
  431. stageName: '',
  432. sectionName: '',
  433. organizationName: '',
  434. deptName: '',
  435. typeName: '',
  436. optionName: '',
  437. nonQuantifiedValue: ''
  438. }
  439. this.nonQuantifiedList.unshift(obj)
  440. },
  441. saveDetail() {
  442. let that = this
  443. let params = []
  444. if (that.activeName === 'first') {
  445. that.quantifiedList.forEach(item =>{
  446. let obj = {
  447. id: item.id,
  448. isQuantified: '是',
  449. quantifiedValue: item.quantifiedValue,
  450. state: item.state
  451. }
  452. params.push(obj)
  453. })
  454. } else {
  455. that.nonQuantifiedList.forEach(item =>{
  456. let obj = {
  457. isQuantified: '否',
  458. quantifiedValue: 0.0,
  459. optionCode: 'ZRMB', // 指标项
  460. nonQuantifiedValue: item.nonQuantifiedValue,
  461. state: item.state,
  462. deptResponsibilityId: that.rowMsg.id
  463. }
  464. if (item.showInput) {
  465. obj.organizationEvaluationRuleId = item.organizationName //单位id
  466. obj.indicatorId = item.childName //指标id
  467. } else {
  468. obj.id = item.id
  469. obj.organizationEvaluationRuleId = item.organizationEvaluationRuleId
  470. obj.indicatorId = item.indicatorId
  471. }
  472. params.push(obj)
  473. })
  474. }
  475. apiGetindicatorsaveBatchDto(params).then(datas =>{
  476. if (datas) {
  477. if (datas.success) {
  478. that.$message({
  479. message: '保存成功',
  480. type: 'success'
  481. });
  482. that.getDetails(that.rowMsg.id)
  483. } else {
  484. that.$message({
  485. message: datas.data,
  486. type: 'error'
  487. })
  488. }
  489. }
  490. })
  491. },
  492. examineAndApprove(type) {
  493. let that = this
  494. let actionCS = ''
  495. if (type === 'agree') {
  496. if (that.rowMsg.taskType === 'SIGN') {
  497. actionCS = 'signAgree'
  498. } else if (that.rowMsg.taskType === 'NORMAL') {
  499. actionCS = 'agree'
  500. }
  501. } else {
  502. if (that.rowMsg.taskType === 'SIGN') {
  503. actionCS = 'signReject'
  504. } else if (that.rowMsg.taskType === 'NORMAL') {
  505. actionCS = 'reject'
  506. }
  507. }
  508. let params = {
  509. taskId: that.rowMsg.id, //任务ID
  510. nodeId: that.rowMsg.nodeId, //节点ID
  511. action: actionCS, //固定值
  512. instanceId: that.rowMsg.instId, //流程实例ID
  513. opinion: that.descMsg, //审批意见
  514. iamCode: window.localStorage.getItem('code'), //认证后code值
  515. taskName: that.rowMsg.name,
  516. defKey: that.instanceChild.defKey,
  517. bizKey: that.instanceChild.bizKey
  518. }
  519. apiPostIsdoAction(params).then(datas =>{
  520. if (datas && datas.data) {
  521. if (datas.data.isOk) {
  522. that.$message({
  523. message: datas.data.data,
  524. type: 'success'
  525. })
  526. that.dialogVisible = false
  527. that.$emit('approveMsg', datas.data.isOk)
  528. } else {
  529. that.$message({
  530. message: datas.data.msg,
  531. type: 'error'
  532. })
  533. }
  534. }
  535. })
  536. },
  537. handleImport() {
  538. this.$refs.importPage.upload.title = "考评目标信息导入"
  539. this.$refs.importPage.upload.open = true
  540. this.$refs.importPage.upload.url = '/responsibility-indicator-info/import'
  541. },
  542. successImport(val) {
  543. this.getDetails(this.rowMsg.id)
  544. },
  545. handleExport() {
  546. let data = [] //接口返回数据
  547. const workbook = new ExcelJS.Workbook()
  548. const worksheet = workbook.addWorksheet('Sheet1')
  549. //根据数据自己调整
  550. let colums = []
  551. colums = [
  552. { header: 'ID', key: 'id', width: 26 },
  553. { header: '单位名称', key: 'organizationShortName', width: 26 },
  554. { header: '指标分类', key: 'typeName', width: 18 },
  555. { header: '业务阶段', key: 'stageName', width: 18 },
  556. { header: '业务属性', key: 'sectionName', width: 18 },
  557. { header: '指标名称', key: 'childName', width: 18 },
  558. { header: '填报部门', key: 'deptName', width: 26 },
  559. ]
  560. if (this.activeName === 'first') {
  561. colums.push(
  562. { header: '目标值', key: 'quantifiedValue', width: 18 },
  563. { header: '单位', key: 'unit', width: 18 },
  564. { header: '审核状态', key: 'state', width: 18 }
  565. )
  566. this.quantifiedList.forEach(item =>{
  567. if (item.updateMark) {
  568. data.push(item)
  569. }
  570. })
  571. } else {
  572. colums.push(
  573. { header: '值', key: 'nonQuantifiedValue', width: 18 },
  574. { header: '审核状态', key: 'state', width: 18 }
  575. )
  576. this.nonQuantifiedList.forEach(item =>{
  577. if (item.updateMark) {
  578. data.push(item)
  579. }
  580. })
  581. }
  582. worksheet.columns = colums
  583. worksheet.getRow(1).font = {
  584. size: 12,
  585. bold: true
  586. }
  587. worksheet.addRows(data)
  588. workbook.xlsx.writeBuffer().then(buffer => {
  589. //这里为type
  590. const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8' })
  591. fileSave(blob, `数据导出.xlsx`)
  592. })
  593. },
  594. }
  595. }
  596. </script>
  597. <style lang="less">
  598. .startFrom{
  599. .el-overlay{
  600. .el-dialog{
  601. // margin-top: 7vh;
  602. .el-dialog__body{
  603. padding: 0 20px !important;
  604. .startDetail{
  605. .starttitleSty{
  606. font-size: 18px;
  607. font-family: Microsoft YaHei;
  608. font-weight: bold;
  609. color: #3B7AD1;
  610. // line-height: 12px;
  611. margin: 20px 0 20px 10px;
  612. }
  613. .danjuMsg{
  614. border: 1px solid #D6DBEA;
  615. padding: 10px 20px;
  616. border-radius: 10px;
  617. margin-bottom: 20px;
  618. .danjuMsg_data{
  619. padding: 5px 0 10px 0;
  620. .data_tit{
  621. margin-right: 10px;
  622. font-weight: bold;
  623. font-size: 14px;
  624. font-family: Microsoft YaHei;
  625. color: #8991B0;
  626. }
  627. .data_tit_wd{
  628. display: inline-block;
  629. width: 90px;
  630. }
  631. .el-form-item--small{
  632. .el-input{
  633. height: 25px;
  634. width: 160px;
  635. }
  636. margin-bottom: 0;
  637. .el-input-number{
  638. height: 25px;
  639. .el-input-number__decrease, .el-input-number__increase{
  640. right: -39px;
  641. }
  642. }
  643. }
  644. }
  645. }
  646. .el-select, .el-input{
  647. width: 100%;
  648. }
  649. .detaTableBtns{
  650. display: flex;
  651. width: 340px;
  652. position: relative;
  653. top: 32px;
  654. left: 80vw;
  655. z-index: 11111;
  656. .tableBtn {
  657. display: flex;
  658. margin-right: 30px;
  659. img{
  660. margin-right: 5px;
  661. margin-top: 1px;
  662. }
  663. span{
  664. font-size: 14px;
  665. font-family: Microsoft YaHei;
  666. font-weight: 400;
  667. }
  668. }
  669. .add{
  670. cursor: pointer;
  671. span{
  672. color: #3B7AD1;
  673. }
  674. }
  675. .save{
  676. cursor: pointer;
  677. span{
  678. color: #50C14E;
  679. }
  680. }
  681. .edit{
  682. span{
  683. color: #F5A623;
  684. }
  685. }
  686. .delete{
  687. cursor: no-drop;
  688. span{
  689. color: #F65177;
  690. }
  691. }
  692. .export{
  693. cursor: pointer;
  694. span{
  695. color: #2baa8a;
  696. }
  697. }
  698. .import{
  699. cursor: pointer;
  700. span{
  701. color: #ce1e78;
  702. }
  703. }
  704. }
  705. .el-tabs{
  706. .el-tabs__header{
  707. .el-tabs__nav{
  708. .el-tabs__item{
  709. font-size: 18px;
  710. font-family: Microsoft YaHei;
  711. font-weight: bold;
  712. margin: 0 10px;
  713. color: #8991B0;
  714. }
  715. .is-active{
  716. font-size: 18px;
  717. font-family: Microsoft YaHei;
  718. font-weight: bold;
  719. color: #3B7AD1;
  720. margin: 0 10px;
  721. }
  722. }
  723. }
  724. .el-table{
  725. margin-bottom: 10px;
  726. .el-table__body-wrapper{
  727. height: 50vh;
  728. }
  729. .el-table__row{
  730. .cell{
  731. .el-input{
  732. height: 24px;
  733. .el-input__inner{
  734. height: 24px;
  735. }
  736. }
  737. }
  738. }
  739. }
  740. }
  741. }
  742. }
  743. .el-dialog__footer{
  744. .dialog-footer{
  745. display: flex;
  746. justify-content: center;
  747. .el-button{
  748. width: 180px !important;
  749. height: 40px !important;
  750. }
  751. }
  752. }
  753. }
  754. }
  755. }
  756. </style>