DataItem.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670
  1. <template>
  2. <div class="select-box" v-loading="selectedLoad[dimension]">
  3. <el-cascader v-model="form.schema[dimension].field" :options="options[dimension]" :props="props" @change="onChange(true, true)" :show-all-levels="false" clearable style="width: 100%"></el-cascader>
  4. <el-select v-if="expandField[dimension].length" v-model="form.schema[dimension].expand" @change="onChange3(dimension)" placeholder="请选择拓展字段" style="width: 100%;margin-top: 15px;">
  5. <el-option v-for="item in expandField[dimension]" :value="item.id" :key="item.id" :label="item.name"></el-option>
  6. </el-select>
  7. <div>
  8. <div style="text-align: right;height: 40px;">
  9. <template v-if="form.schema[dimension].type !== 6">
  10. <el-button v-if="form.schema[dimension].ptype === 3 || form.schema[dimension].ptype === 4" type="text" @click="handleEdit">编辑</el-button>
  11. <template v-else>
  12. <el-dropdown size="medium" @command="handleCommand">
  13. <el-button type="text" class="el-dropdown-link">
  14. <span v-if="form.schema[dimension].num !== allData">{{ form.schema[dimension].ptype === 1 ? `Top` : `最近` }} {{ form.schema[dimension].num }}</span>
  15. <span v-else>全部数据</span>
  16. <i class="el-icon-arrow-down el-icon--right"></i>
  17. </el-button>
  18. <el-dropdown-menu slot="dropdown">
  19. <el-dropdown-item v-for="i in 5" :command="i * 10"><span>{{ form.schema[dimension].ptype === 1 ? `Top` : `最近` }}</span> {{ i * 10 }}</el-dropdown-item>
  20. <el-dropdown-item :command="allData">全部数据</el-dropdown-item>
  21. </el-dropdown-menu>
  22. </el-dropdown>
  23. </template>
  24. </template>
  25. <template v-else>
  26. <el-button type="text" @click="handleSelectAll">全选</el-button>
  27. <el-button type="text" @click="handleCancelAll">取消</el-button>
  28. </template>
  29. </div>
  30. <el-container class="selected-list">
  31. <template v-if="form.schema[dimension].ptype !== 0">
  32. <el-main :style="{ padding: form.schema[dimension].type === 6 ? '15px 0' : '15px' }">
  33. <template v-if="form.schema[dimension].type !== 6">
  34. <el-checkbox-group v-model="selected[dimension]">
  35. <el-row v-for="item in form.source[dimension]">
  36. <el-checkbox :label="item.name">{{ item.name }}<span v-if="item.number == 0 || item.number">({{ item.number }})</span></el-checkbox>
  37. </el-row>
  38. </el-checkbox-group>
  39. </template>
  40. <template v-else>
  41. <el-tree ref="tree" :data="form.source[dimension]" check-strictly :default-checked-keys="treeKey[dimension]" @check-change="checkChange" show-checkbox node-key="id" :props="defaultProps"></el-tree>
  42. </template>
  43. </el-main>
  44. </template>
  45. </el-container>
  46. </div>
  47. <el-dialog title="编辑" :visible.sync="dialogVisible" width="700px" :append-to-body="true" :close-on-click-modal="false">
  48. <el-container>
  49. <el-header v-if="form.schema[dimension].ptype === 4">
  50. <div class="head">
  51. <p>
  52. <span>最小年份:{{ minDate }}</span>
  53. <span>最大年份:{{ maxDate }}</span>
  54. </p>
  55. <div>
  56. <el-popover placement="bottom" title="" ref="popover" width="100" trigger="click">
  57. <el-main class="patent-fast-edit-popover">
  58. <div class="btn" @click="quickAdd(0)">清空</div>
  59. <div class="btn" @click="quickAdd(2)">2年</div>
  60. <div class="btn" @click="quickAdd(3)">3年</div>
  61. <div class="btn" @click="quickAdd(4)">5年</div>
  62. <el-divider></el-divider>
  63. <div class="select-number">
  64. <el-input size="mini" type="number" v-model="num" @change="quickAdd(num)"></el-input>
  65. <span>年</span>
  66. </div>
  67. </el-main>
  68. <el-button type="text" size="small" class="margin-left_10" slot="reference"> 快速添加<i
  69. class="el-icon-arrow-down el-icon--right"></i></el-button>
  70. </el-popover>
  71. </div>
  72. </div>
  73. </el-header>
  74. <el-main class="sc-form-table">
  75. <el-table :data="copyData" border>
  76. <el-table-column type="index" width="50" >
  77. <template slot="header">
  78. <el-button type="primary" icon="el-icon-plus" size="mini" circle @click="rowAdd()"></el-button>
  79. </template>
  80. <template slot-scope="scope">
  81. <div>
  82. <!-- <span>{{scope.$index + 1}}</span> -->
  83. <el-button type="danger" icon="el-icon-delete" size="mini" plain circle @click="rowDel(scope.row, scope.$index)"></el-button>
  84. </div>
  85. </template>
  86. </el-table-column>
  87. <el-table-column label="名称" align="center" show-overflow-tooltip>
  88. <template slot-scope="scope">
  89. <div v-if="quick">
  90. {{ scope.row.name }}
  91. </div>
  92. <div v-else>
  93. <el-input v-model="scope.row.name" size="small"></el-input>
  94. </div>
  95. </template>
  96. </el-table-column>
  97. <el-table-column label="开始" align="center" width="200">
  98. <template slot-scope="scope">
  99. <div v-if="quick">
  100. {{ scope.row.startTime }}
  101. </div>
  102. <div v-else>
  103. <div v-if="form.schema[dimension].ptype === 3">
  104. <el-select v-model="scope.row.min.operator" size="small" placeholder="" style="width: 60px;">
  105. <el-option :value="0" label=">"></el-option>
  106. <el-option :value="1" label="≥"></el-option>
  107. </el-select>
  108. <el-input v-model="scope.row.min.value" size="small" style="width: 100px;padding-left: 10px;"></el-input>
  109. </div>
  110. <div v-else-if="form.schema[dimension].ptype === 4">
  111. <el-date-picker v-model="scope.row.startTime" value-format="yyyy-MM-dd" size="small" type="date" placeholder="选择开始日期" style="width: 100%;"></el-date-picker>
  112. </div>
  113. </div>
  114. </template>
  115. </el-table-column>
  116. <el-table-column label="结束" align="center" width="200">
  117. <template slot-scope="scope">
  118. <div v-if="quick">
  119. {{ scope.row.endTime }}
  120. </div>
  121. <div v-else>
  122. <div v-if="form.schema[dimension].ptype === 3">
  123. <el-select v-model="scope.row.max.operator" size="small" placeholder="" style="width: 60px;">
  124. <el-option :value="2" label="<"></el-option>
  125. <el-option :value="3" label="≤"></el-option>
  126. </el-select>
  127. <el-input v-model="scope.row.max.value" size="small" style="width: 100px;padding-left: 10px;"></el-input>
  128. </div>
  129. <div v-else-if="form.schema[dimension].ptype === 4">
  130. <el-date-picker v-model="scope.row.endTime" value-format="yyyy-MM-dd" size="small" type="date" placeholder="选择结束日期" style="width: 100%;"></el-date-picker>
  131. </div>
  132. </div>
  133. </template>
  134. </el-table-column>
  135. </el-table>
  136. </el-main>
  137. </el-container>
  138. <div slot="footer" class="dialog-footer">
  139. <el-button @click="cancel">取 消</el-button>
  140. <el-button type="primary" @click="handleConfirm" :loading="loadingBtn">确 定</el-button>
  141. </div>
  142. </el-dialog>
  143. </div>
  144. </template>
  145. <script>
  146. import { customPage } from "@/views/analyse/custom/mixins";
  147. import { mapGetters } from "vuex";
  148. import { findChildren, getTreeDataList } from "@/utils";
  149. import { getSourceName, getTreeNameByIds } from "@/utils/chart";
  150. export default {
  151. mixins: [customPage],
  152. props: ['dimension'],
  153. data() {
  154. return {
  155. allData: 9999999,
  156. dialogVisible: false,
  157. loadingBtn: false,
  158. copyData: [],
  159. parentId: -1,
  160. props: {
  161. expandTrigger: 'click',
  162. value: 'value',
  163. label: 'name',
  164. emitPath: false
  165. },
  166. expandField: {
  167. x: [],
  168. y: [],
  169. },
  170. options: {
  171. x: [],
  172. y: [],
  173. },
  174. typeList: {
  175. 'classify': '分类号',
  176. 'company': '公司/人',
  177. 'dateType': '日期',
  178. 'nation': '区域',
  179. 'amount': '引用/同族',
  180. '95': '其他',
  181. '96': '自定义字段',
  182. },
  183. defaultProps: {
  184. children: 'children',
  185. label: 'name'
  186. },
  187. maxDate:'',
  188. minDate:'',
  189. quick:false,
  190. num:0,
  191. }
  192. },
  193. computed: {
  194. ...mapGetters([ 'userinfo', 'patentField'])
  195. },
  196. watch: {
  197. selected: {
  198. deep: true,
  199. handler(n, o) {
  200. if (this.form.schema[this.dimension].type !== 6) {
  201. this.form.source[this.dimension].map(item => {
  202. item.selected = this.selected[this.dimension].indexOf(item.name) !== -1
  203. })
  204. this.$store.dispatch('getItemSettingColor', [])
  205. }
  206. }
  207. }
  208. },
  209. mounted() {
  210. this.initData()
  211. this.onChange(false, false)
  212. if (this.form.schema[this.dimension].type === 6) {
  213. let tree = getTreeDataList(this.form.source[this.dimension], [])
  214. if (this.treeKey[this.dimension].length) {
  215. let data = tree.find(item => item.id === this.treeKey[this.dimension][0])
  216. this.parentId = data ? data.parentId : -1
  217. this.setChildren(this.form.source[this.dimension])
  218. }
  219. }
  220. this.initOptions()
  221. },
  222. methods: {
  223. getSourceName() {
  224. switch (this.dimension) {
  225. case 'x':
  226. this.form.setting.title1 = getSourceName(this.form.schema.x, this.form.schema.x.expand, this.form.schema.x.num)
  227. break
  228. case 'y':
  229. this.form.setting.title2 = getSourceName(this.form.schema.y, this.form.schema.y.expand, this.form.schema.y.num)
  230. break
  231. }
  232. },
  233. initData(){
  234. var data = this.patentField
  235. for (let i = 0; i < data.length; i++) {
  236. if(data[i].groupBy == 'dateType'){
  237. data[i].expand = [
  238. {
  239. "id": '月',
  240. "name": "月",
  241. "ptype": 2
  242. },
  243. {
  244. "id": "季",
  245. "name": "季",
  246. "ptype": 2
  247. },
  248. {
  249. "id": "半年",
  250. "name": "半年",
  251. "ptype": 2
  252. },
  253. {
  254. "id": "年",
  255. "name": "年",
  256. "ptype": 2
  257. },
  258. {
  259. "id": "自定义",
  260. "name": "自定义",
  261. "ptype": 4
  262. }
  263. ]
  264. }
  265. // 给ipc、cpc、upc、loc添加大小类等
  266. if (data[i].groupBy == 'classify') {
  267. var special= {
  268. MC: [
  269. { id: 'IC', name: '部' },
  270. { id: 'IC2', name: '大类' },
  271. { id: 'IC3', name: '小类' },
  272. { id: 'IC4', name: '大组' },
  273. { id: 'IC5', name: '小组' },
  274. ],
  275. CPC: [
  276. { id: 'CPC', name: '部' },
  277. { id: 'CPC2', name: '大类' },
  278. { id: 'CPC3', name: '小类' },
  279. { id: 'CPC4', name: '大组' },
  280. { id: 'CPC5', name: '小组' },
  281. ],
  282. UPC: [
  283. // { value: '0', label: '分类号' },//老系统有
  284. { id: 'UPC', name: '大类' },
  285. { id: 'UPC2', name: '小类' },
  286. ],
  287. LOC: [
  288. // { value: '0', label: '分类号' },//老系统有
  289. { id: 'LOC', name: '大类' },
  290. { id: 'LOC2', name: '小类' },
  291. ],
  292. }
  293. data[i].expand = special[data[i].value]
  294. }
  295. }
  296. this.$store.commit('SET_SYSTEM_FIELD',data)
  297. },
  298. initOptions() {
  299. let obj = {
  300. text: '文本',
  301. number: '号码',
  302. typeStatus: '类型及状态',
  303. classify: '分类',
  304. dateType: '日期',
  305. company: '公司/人',
  306. typeStatus: '类型及状态',
  307. address: '地址',
  308. nation: '国家/地区',
  309. amount: '引用',
  310. customField: '自定义字段',
  311. }
  312. let filedObj = {}
  313. let data = this.patentField
  314. for (let i = 0; i < data.length; i++) {
  315. if (data[i].filedKind == -1) {//专利本身
  316. if(['text','number','address'].includes(data[i].groupBy)){
  317. continue
  318. }
  319. if(data[i].groupBy == 'nation'){
  320. if(data[i].name.indexOf('县')!=-1 ){
  321. continue
  322. }
  323. }
  324. if (filedObj[data[i].groupBy]) {
  325. filedObj[data[i].groupBy].children.push(data[i])
  326. } else {
  327. filedObj[data[i].groupBy] = {
  328. value: data[i].groupBy,
  329. name: obj[data[i].groupBy],
  330. children: [
  331. data[i]
  332. ],
  333. }
  334. }
  335. } else {//自定义字段
  336. if (filedObj.customField) {
  337. filedObj.customField.children.push(data[i])
  338. } else {
  339. filedObj[data[i].group] = {
  340. value: 'customField',
  341. name: obj.customField,
  342. children: [data[i]]
  343. }
  344. }
  345. }
  346. }
  347. var options = Object.values(filedObj)
  348. for (let key in this.options) {
  349. this.$set(this.options, key, options)
  350. }
  351. },
  352. updateSelected() {
  353. this.selected[this.dimension] = this.form.source[this.dimension].slice(0, this.form.schema[this.dimension].num).map(item => item.name)
  354. // this.$store.commit('SET_CHART_SELECTED', this.selected)
  355. this.getSourceName()
  356. },
  357. async handleCommand(command) {
  358. this.form.schema[this.dimension].num = command
  359. await this.$store.dispatch('getSourceDataList', this.dimension)
  360. this.updateSelected()
  361. },
  362. async onChange(option, reset) {
  363. const field = this.patentField.find(item => item.value === this.form.schema[this.dimension].field)
  364. if (field) {
  365. this.$set(this.expandField, this.dimension, field.expand || [])
  366. } else {
  367. this.$set(this.form.schema[this.dimension], 'field', null)
  368. this.$set(this.expandField, this.dimension, [])
  369. }
  370. if (option && !field) {
  371. this.$store.commit('SET_RELOAD_DATA', true)
  372. }
  373. if (reset) {
  374. if(field && field.groupBy == 'dateType'){
  375. this.$set(this.form.schema[this.dimension], 'expand', '年')
  376. }else{
  377. this.$set(this.form.schema[this.dimension], 'expand',null)
  378. }
  379. await this.onChange3(this.dimension)
  380. }
  381. },
  382. getSchemaType() {
  383. let ptype = 0, type = 0
  384. const field = this.patentField.find(item => item.value === this.form.schema[this.dimension].field)
  385. if (field) {
  386. type = field.type
  387. if (!field.ptype && this.form.schema[this.dimension].expand) {
  388. const expand = field.expand.find(item => item.id === this.form.schema[this.dimension].expand)
  389. ptype = expand.ptype
  390. } else {
  391. ptype = field.ptype
  392. if (['classify'].includes(field.groupBy)) {
  393. ptype = 0
  394. }
  395. if(['amount'].includes(field.groupBy)){
  396. ptype = 3
  397. }
  398. }
  399. this.$set(this.form.schema[this.dimension], 'fieldKind', field.filedKind)
  400. this.$set(this.form.schema[this.dimension], 'name', field.name)
  401. this.$set(this.form.schema[this.dimension], 'groupBy', field.groupBy)
  402. } else {
  403. ptype = 0
  404. }
  405. this.$set(this.form.schema[this.dimension], 'type', type)
  406. this.$set(this.form.schema[this.dimension], 'ptype', ptype)
  407. },
  408. async onChange3(dimension) {
  409. this.copyData = []
  410. this.getSchemaType()
  411. this.$store.commit('SET_CHANGE_NUM')
  412. if (this.form.schema[dimension].field) {
  413. await this.$store.dispatch('getSourceDataList', dimension)
  414. } else {
  415. this.form.source[dimension] = []
  416. }
  417. this.updateSelected()
  418. },
  419. //快速添加
  420. quickAdd(option1){
  421. if(option1 == 0){
  422. this.copyData = []
  423. this.quick = false
  424. return false
  425. }
  426. var min = Number(this.minDate)
  427. var max = Number(this.maxDate)
  428. var data = []
  429. var option = Number(option1)
  430. for(var i = max;i>min;i=i-option){
  431. var prev = (i-option)<min?min:i-option
  432. data.push(
  433. {
  434. name:`${prev}-${i}`,
  435. endTime:i,
  436. startTime:prev
  437. }
  438. )
  439. }
  440. this.quick = true
  441. this.copyData = data
  442. this.$refs.popover.doClose()
  443. },
  444. async handleEdit() {
  445. this.copyData = JSON.parse(JSON.stringify(this.form.source[this.dimension]))
  446. if(this.form.schema[this.dimension].type == 'DateTime'){
  447. const field = this.patentField.find(item => item.value === this.form.schema[this.dimension].field)
  448. if(field){
  449. if(!field.minDate && !field.maxDate){
  450. var param = {
  451. ...this.form.search,
  452. field:field.field
  453. }
  454. await this.$api.getFieldRange(param).then(response=>{
  455. if(response.code == 200){
  456. field.maxDate = response.data.maxDate
  457. field.minDate = response.data.minDate
  458. }
  459. })
  460. }
  461. this.maxDate = field.maxDate
  462. this.minDate = field.minDate
  463. }
  464. }
  465. this.quick = false
  466. this.dialogVisible = true
  467. },
  468. cancel() {
  469. this.dialogVisible = false
  470. },
  471. async handleConfirm() {
  472. this.validateForm().then(async (response) => {
  473. this.form.source[this.dimension] = JSON.parse(JSON.stringify(this.copyData))
  474. let selected = this.selected
  475. if(this.form.schema[this.dimension].ptype == 4){
  476. selected[this.dimension] = this.form.source[this.dimension].map(item => `${item.startTime}-${item.endTime}`)
  477. }else if(this.form.schema[this.dimension].ptype == 3){
  478. selected[this.dimension] = this.form.source[this.dimension].map(item => `${item.min.value}-${item.max.value}`)
  479. }
  480. this.$store.commit('SET_CHART_SELECTED', selected)
  481. this.$store.commit('SET_RELOAD_DATA', true)
  482. this.dialogVisible = false
  483. }).catch(error => {
  484. this.$message.error(error)
  485. })
  486. },
  487. validateForm() {
  488. return new Promise((resolve, reject) => {
  489. const name = this.copyData.map(item => item.name)
  490. if (name.indexOf("") !== -1) {
  491. reject('请输入名称')
  492. }
  493. if (new Set(name).size !== name.length) {
  494. reject('名称不能重复')
  495. }
  496. switch (this.form.schema[this.dimension].ptype) {
  497. case 3:
  498. if (this.copyData.map(item => item.min.value).indexOf("") !== -1 || this.copyData.map(item => item.min.operator).indexOf("") !== -1 || this.copyData.map(item => item.max.value).indexOf("") !== -1 || this.copyData.map(item => item.max.operator).indexOf("") !== -1) {
  499. reject('运算符或范围不能为空')
  500. }
  501. resolve()
  502. break;
  503. case 4:
  504. if (this.copyData.map(item => item.startTime).indexOf("") !== -1 || this.copyData.map(item => item.endTime).indexOf("") !== -1 || this.copyData.map(item => item.startTime).indexOf(null) !== -1 || this.copyData.map(item => item.endTime).indexOf(null) !== -1) {
  505. reject('开始或结束时间不能为空')
  506. }
  507. resolve()
  508. break;
  509. }
  510. reject('参数类型错误')
  511. })
  512. },
  513. rowAdd() {
  514. switch (this.form.schema[this.dimension].ptype) {
  515. case 3:
  516. this.copyData.push({
  517. name: '',
  518. min: {
  519. operator: '',
  520. value: ''
  521. },
  522. max: {
  523. operator: '',
  524. value: ''
  525. },
  526. selected: true
  527. })
  528. break
  529. case 4:
  530. this.copyData.push({
  531. name: '',
  532. startTime: '',
  533. endTime: '',
  534. selected: true
  535. })
  536. break
  537. }
  538. },
  539. rowDel(row, index) {
  540. this.copyData.splice(index, 1)
  541. },
  542. setChildren(arr) {
  543. arr.forEach(item => {
  544. this.$set(item, 'disabled', item.parentId !== this.parentId && this.parentId !== -1)
  545. if (item.children && item.children.length) {
  546. this.setChildren(item.children)
  547. } else {
  548. }
  549. })
  550. },
  551. checkChange(data, checked, indeterminate) {
  552. this.parentId = -1
  553. this.treeKey[this.dimension] = this.$refs.tree.getCheckedKeys()
  554. if (this.parentId === -1) {
  555. this.parentId = data.parentId
  556. }
  557. if (this.treeKey[this.dimension].length === 0) {
  558. this.parentId = -1
  559. }
  560. this.selected[this.dimension] = getTreeNameByIds(this.form.source[this.dimension], this.treeKey[this.dimension])
  561. this.$store.commit('SET_RELOAD_DATA', true)
  562. this.setChildren(this.form.source[this.dimension])
  563. },
  564. handleSelectAll() {
  565. if (this.parentId === -1) {
  566. return false
  567. }
  568. const tree = getTreeDataList(this.form.source[this.dimension], [])
  569. const data = tree.filter(item => item.parentId === this.parentId)
  570. this.treeKey[this.dimension] = data.map(item => item.id)
  571. this.selected[this.dimension] = getTreeNameByIds(this.form.source[this.dimension], this.treeKey[this.dimension])
  572. this.$store.commit('SET_RELOAD_DATA', true)
  573. },
  574. handleCancelAll() {
  575. this.parentId = -1
  576. this.treeKey[this.dimension] = []
  577. this.selected[this.dimension] = []
  578. this.$refs.tree.setCheckedKeys([])
  579. this.$store.commit('SET_RELOAD_DATA', true)
  580. this.setChildren(this.form.source[this.dimension])
  581. }
  582. }
  583. }
  584. </script>
  585. <style lang="less">
  586. .select-box {
  587. padding: 15px;
  588. }
  589. .selected-list {
  590. background: #f4f4f4;
  591. height: 250px !important;
  592. border: 1px solid #DCDFE6;
  593. border-radius: 4px;
  594. .el-main {
  595. .el-row {
  596. line-height: 20px;
  597. }
  598. .el-tree {
  599. background: none !important;
  600. }
  601. }
  602. }
  603. </style>
  604. <style lang="scss" scoped>
  605. .head{
  606. width: 100%;
  607. display:flex;
  608. justify-content:space-between;
  609. align-items: center;
  610. }
  611. </style>
  612. <style lang="scss" scoped>
  613. .patent-fast-edit-popover {
  614. padding: 0 !important;
  615. .btn {
  616. color: #000;
  617. line-height: 30px;
  618. border-radius: 5px;
  619. padding-left: 10px;
  620. text-align: left;
  621. font-size: 14px;
  622. cursor: pointer;
  623. &:hover {
  624. background: #adadad;
  625. color: #fff;
  626. }
  627. }
  628. .disabled {
  629. cursor: not-allowed !important;
  630. }
  631. .bottom {
  632. text-align: right;
  633. color: #1e9fff;
  634. line-height: 40px;
  635. padding-left: 10px;
  636. font-size: 18px;
  637. }
  638. .el-divider--horizontal {
  639. margin: 10px 0 !important;
  640. }
  641. .select-number {
  642. .el-input {
  643. width: 70px;
  644. }
  645. span {
  646. padding: 0 3px;
  647. }
  648. }
  649. }
  650. </style>