DataItem.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678
  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. children: 'child',
  166. },
  167. expandField: {
  168. x: [],
  169. y: [],
  170. },
  171. options: {
  172. x: [],
  173. y: [],
  174. },
  175. typeList: {
  176. 'classify': '分类号',
  177. 'company': '公司/人',
  178. 'dateType': '日期',
  179. 'nation': '区域',
  180. 'amount': '引用/同族',
  181. '95': '其他',
  182. '96': '自定义字段',
  183. },
  184. defaultProps: {
  185. children: 'child',
  186. label: 'name'
  187. },
  188. maxDate:'',
  189. minDate:'',
  190. quick:false,
  191. num:0,
  192. }
  193. },
  194. computed: {
  195. ...mapGetters([ 'userinfo', 'patentField'])
  196. },
  197. watch: {
  198. selected: {
  199. deep: true,
  200. handler(n, o) {
  201. if (this.form.schema[this.dimension].type !== 6) {
  202. this.form.source[this.dimension].map(item => {
  203. item.selected = this.selected[this.dimension].indexOf(item.name) !== -1
  204. })
  205. this.$store.dispatch('getItemSettingColor', [])
  206. }
  207. }
  208. }
  209. },
  210. mounted() {
  211. this.initData()
  212. this.onChange(false, false)
  213. if (this.form.schema[this.dimension].type === 6) {
  214. let tree = getTreeDataList(this.form.source[this.dimension], [])
  215. if (this.treeKey[this.dimension].length) {
  216. let data = tree.find(item => item.id === this.treeKey[this.dimension][0])
  217. this.parentId = data ? data.parentId : -1
  218. this.setChildren(this.form.source[this.dimension])
  219. }
  220. }
  221. this.initOptions()
  222. },
  223. methods: {
  224. getSourceName() {
  225. switch (this.dimension) {
  226. case 'x':
  227. this.form.setting.title1 = getSourceName(this.form.schema.x, this.form.schema.x.expand, this.form.schema.x.num)
  228. break
  229. case 'y':
  230. this.form.setting.title2 = getSourceName(this.form.schema.y, this.form.schema.y.expand, this.form.schema.y.num)
  231. break
  232. }
  233. },
  234. initData(){
  235. var data = this.patentField
  236. for (let i = 0; i < data.length; i++) {
  237. if(data[i].groupBy == 'dateType'){
  238. data[i].expand = [
  239. {
  240. "id": '月',
  241. "name": "月",
  242. "ptype": 2
  243. },
  244. {
  245. "id": "季",
  246. "name": "季",
  247. "ptype": 2
  248. },
  249. {
  250. "id": "半年",
  251. "name": "半年",
  252. "ptype": 2
  253. },
  254. {
  255. "id": "年",
  256. "name": "年",
  257. "ptype": 2
  258. },
  259. {
  260. "id": "自定义",
  261. "name": "自定义",
  262. "ptype": 4
  263. }
  264. ]
  265. }
  266. // 给ipc、cpc、upc、loc添加大小类等
  267. if (data[i].groupBy == 'classify') {
  268. // var special= {
  269. // MC: [
  270. // { id: 'IC', name: '部' },
  271. // { id: 'IC2', name: '大类' },
  272. // { id: 'IC3', name: '小类' },
  273. // { id: 'IC4', name: '大组' },
  274. // { id: 'IC5', name: '小组' },
  275. // ],
  276. // CPC: [
  277. // { id: 'CPC', name: '部' },
  278. // { id: 'CPC2', name: '大类' },
  279. // { id: 'CPC3', name: '小类' },
  280. // { id: 'CPC4', name: '大组' },
  281. // { id: 'CPC5', name: '小组' },
  282. // ],
  283. // UPC: [
  284. // // { value: '0', label: '分类号' },//老系统有
  285. // { id: 'UPC', name: '大类' },
  286. // { id: 'UPC2', name: '小类' },
  287. // ],
  288. // LOC: [
  289. // // { value: '0', label: '分类号' },//老系统有
  290. // { id: 'LOC', name: '大类' },
  291. // { id: 'LOC2', name: '小类' },
  292. // ],
  293. // }
  294. // data[i].expand = special[data[i].value]
  295. data[i].expand = data[i].children.map(item => {
  296. return {
  297. id: item.value,
  298. name: item.label
  299. }
  300. })
  301. }
  302. }
  303. this.$store.commit('SET_SYSTEM_FIELD',data)
  304. },
  305. initOptions() {
  306. let obj = {
  307. text: '文本',
  308. number: '号码',
  309. typeStatus: '类型及状态',
  310. classify: '分类',
  311. dateType: '日期',
  312. company: '公司/人',
  313. typeStatus: '类型及状态',
  314. address: '地址',
  315. nation: '国家/地区',
  316. amount: '引用',
  317. customField: '自定义字段',
  318. }
  319. let filedObj = {}
  320. let data = this.patentField
  321. for (let i = 0; i < data.length; i++) {
  322. if (data[i].filedKind == -1) {//专利本身
  323. if(['text','number','address'].includes(data[i].groupBy)){
  324. continue
  325. }
  326. if(data[i].groupBy == 'nation'){
  327. if(data[i].name.indexOf('县')!=-1 ){
  328. continue
  329. }
  330. }
  331. if (filedObj[data[i].groupBy]) {
  332. filedObj[data[i].groupBy].child.push(data[i])
  333. } else {
  334. filedObj[data[i].groupBy] = {
  335. value: data[i].groupBy,
  336. name: obj[data[i].groupBy],
  337. child: [
  338. data[i]
  339. ],
  340. }
  341. }
  342. } else {//自定义字段
  343. if (filedObj.customField) {
  344. filedObj.customField.child.push(data[i])
  345. } else {
  346. filedObj[data[i].group] = {
  347. value: 'customField',
  348. name: obj.customField,
  349. child: [data[i]]
  350. }
  351. }
  352. }
  353. }
  354. var options = Object.values(filedObj)
  355. for (let key in this.options) {
  356. this.$set(this.options, key, options)
  357. }
  358. },
  359. updateSelected() {
  360. this.selected[this.dimension] = this.form.source[this.dimension].slice(0, this.form.schema[this.dimension].num).map(item => item.name)
  361. // this.$store.commit('SET_CHART_SELECTED', this.selected)
  362. this.getSourceName()
  363. },
  364. async handleCommand(command) {
  365. this.form.schema[this.dimension].num = command
  366. await this.$store.dispatch('getSourceDataList', this.dimension)
  367. this.updateSelected()
  368. },
  369. async onChange(option, reset) {
  370. const field = this.patentField.find(item => item.value === this.form.schema[this.dimension].field)
  371. if (field) {
  372. this.$set(this.expandField, this.dimension, field.expand || [])
  373. } else {
  374. this.$set(this.form.schema[this.dimension], 'field', null)
  375. this.$set(this.expandField, this.dimension, [])
  376. }
  377. if (option && !field) {
  378. this.$store.commit('SET_RELOAD_DATA', true)
  379. }
  380. if (reset) {
  381. if(field && field.groupBy == 'dateType'){
  382. this.$set(this.form.schema[this.dimension], 'expand', '年')
  383. }else{
  384. this.$set(this.form.schema[this.dimension], 'expand',null)
  385. }
  386. await this.onChange3(this.dimension)
  387. }
  388. },
  389. getSchemaType() {
  390. let ptype = 0, type = 0
  391. const field = this.patentField.find(item => item.value === this.form.schema[this.dimension].field)
  392. if (field) {
  393. type = field.type
  394. if (!field.ptype && this.form.schema[this.dimension].expand) {
  395. const expand = field.expand.find(item => item.id === this.form.schema[this.dimension].expand)
  396. ptype = expand.ptype
  397. } else {
  398. ptype = field.ptype
  399. if (['classify'].includes(field.groupBy)) {
  400. ptype = 0
  401. }
  402. if(['amount'].includes(field.groupBy)){
  403. ptype = 3
  404. }
  405. }
  406. this.$set(this.form.schema[this.dimension], 'fieldKind', field.filedKind)
  407. this.$set(this.form.schema[this.dimension], 'name', field.name)
  408. this.$set(this.form.schema[this.dimension], 'groupBy', field.groupBy)
  409. } else {
  410. ptype = 0
  411. }
  412. this.$set(this.form.schema[this.dimension], 'type', type)
  413. this.$set(this.form.schema[this.dimension], 'ptype', ptype)
  414. },
  415. async onChange3(dimension) {
  416. this.copyData = []
  417. this.getSchemaType()
  418. this.$store.commit('SET_CHANGE_NUM')
  419. if (this.form.schema[dimension].field) {
  420. await this.$store.dispatch('getSourceDataList', dimension)
  421. } else {
  422. this.form.source[dimension] = []
  423. }
  424. this.updateSelected()
  425. },
  426. //快速添加
  427. quickAdd(option1){
  428. if(option1 == 0){
  429. this.copyData = []
  430. this.quick = false
  431. return false
  432. }
  433. var min = Number(this.minDate)
  434. var max = Number(this.maxDate)
  435. var data = []
  436. var option = Number(option1)
  437. for(var i = max;i>min;i=i-option){
  438. var prev = (i-option)<min?min:i-option
  439. data.push(
  440. {
  441. name:`${prev}-${i}`,
  442. endTime:i,
  443. startTime:prev
  444. }
  445. )
  446. }
  447. this.quick = true
  448. this.copyData = data
  449. this.$refs.popover.doClose()
  450. },
  451. async handleEdit() {
  452. this.copyData = JSON.parse(JSON.stringify(this.form.source[this.dimension]))
  453. if(this.form.schema[this.dimension].type == 'DateTime'){
  454. const field = this.patentField.find(item => item.value === this.form.schema[this.dimension].field)
  455. if(field){
  456. if(!field.minDate && !field.maxDate){
  457. var param = {
  458. ...this.form.search,
  459. field:field.field
  460. }
  461. await this.$api.getFieldRange(param).then(response=>{
  462. if(response.code == 200){
  463. field.maxDate = response.data.maxDate
  464. field.minDate = response.data.minDate
  465. }
  466. })
  467. }
  468. this.maxDate = field.maxDate
  469. this.minDate = field.minDate
  470. }
  471. }
  472. this.quick = false
  473. this.dialogVisible = true
  474. },
  475. cancel() {
  476. this.dialogVisible = false
  477. },
  478. async handleConfirm() {
  479. this.validateForm().then(async (response) => {
  480. this.form.source[this.dimension] = JSON.parse(JSON.stringify(this.copyData))
  481. let selected = this.selected
  482. if(this.form.schema[this.dimension].ptype == 4){
  483. selected[this.dimension] = this.form.source[this.dimension].map(item => `${item.startTime}-${item.endTime}`)
  484. }else if(this.form.schema[this.dimension].ptype == 3){
  485. selected[this.dimension] = this.form.source[this.dimension].map(item => `${item.min.value}-${item.max.value}`)
  486. }
  487. this.$store.commit('SET_CHART_SELECTED', selected)
  488. this.$store.commit('SET_RELOAD_DATA', true)
  489. this.dialogVisible = false
  490. }).catch(error => {
  491. this.$message.error(error)
  492. })
  493. },
  494. validateForm() {
  495. return new Promise((resolve, reject) => {
  496. const name = this.copyData.map(item => item.name)
  497. if (name.indexOf("") !== -1) {
  498. reject('请输入名称')
  499. }
  500. if (new Set(name).size !== name.length) {
  501. reject('名称不能重复')
  502. }
  503. switch (this.form.schema[this.dimension].ptype) {
  504. case 3:
  505. 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) {
  506. reject('运算符或范围不能为空')
  507. }
  508. resolve()
  509. break;
  510. case 4:
  511. 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) {
  512. reject('开始或结束时间不能为空')
  513. }
  514. resolve()
  515. break;
  516. }
  517. reject('参数类型错误')
  518. })
  519. },
  520. rowAdd() {
  521. switch (this.form.schema[this.dimension].ptype) {
  522. case 3:
  523. this.copyData.push({
  524. name: '',
  525. min: {
  526. operator: '',
  527. value: ''
  528. },
  529. max: {
  530. operator: '',
  531. value: ''
  532. },
  533. selected: true
  534. })
  535. break
  536. case 4:
  537. this.copyData.push({
  538. name: '',
  539. startTime: '',
  540. endTime: '',
  541. selected: true
  542. })
  543. break
  544. }
  545. },
  546. rowDel(row, index) {
  547. this.copyData.splice(index, 1)
  548. },
  549. setChildren(arr) {
  550. arr.forEach(item => {
  551. this.$set(item, 'disabled', item.parentId !== this.parentId && this.parentId !== -1)
  552. if (item.child && item.child.length) {
  553. this.setChildren(item.child)
  554. } else {
  555. }
  556. })
  557. },
  558. checkChange(data, checked, indeterminate) {
  559. this.parentId = -1
  560. this.treeKey[this.dimension] = this.$refs.tree.getCheckedKeys()
  561. if (this.parentId === -1) {
  562. this.parentId = data.parentId
  563. }
  564. if (this.treeKey[this.dimension].length === 0) {
  565. this.parentId = -1
  566. }
  567. this.selected[this.dimension] = getTreeNameByIds(this.form.source[this.dimension], this.treeKey[this.dimension])
  568. this.$store.commit('SET_RELOAD_DATA', true)
  569. this.setChildren(this.form.source[this.dimension])
  570. },
  571. handleSelectAll() {
  572. if (this.parentId === -1) {
  573. return false
  574. }
  575. const tree = getTreeDataList(this.form.source[this.dimension], [])
  576. const data = tree.filter(item => item.parentId === this.parentId)
  577. this.treeKey[this.dimension] = data.map(item => item.id)
  578. this.selected[this.dimension] = getTreeNameByIds(this.form.source[this.dimension], this.treeKey[this.dimension])
  579. this.$store.commit('SET_RELOAD_DATA', true)
  580. },
  581. handleCancelAll() {
  582. this.parentId = -1
  583. this.treeKey[this.dimension] = []
  584. this.selected[this.dimension] = []
  585. this.$refs.tree.setCheckedKeys([])
  586. this.$store.commit('SET_RELOAD_DATA', true)
  587. this.setChildren(this.form.source[this.dimension])
  588. }
  589. }
  590. }
  591. </script>
  592. <style lang="less">
  593. .select-box {
  594. padding: 15px;
  595. }
  596. .selected-list {
  597. background: #f4f4f4;
  598. height: 250px !important;
  599. border: 1px solid #DCDFE6;
  600. border-radius: 4px;
  601. .el-main {
  602. .el-row {
  603. line-height: 20px;
  604. }
  605. .el-tree {
  606. background: none !important;
  607. }
  608. }
  609. }
  610. </style>
  611. <style lang="scss" scoped>
  612. .head{
  613. width: 100%;
  614. display:flex;
  615. justify-content:space-between;
  616. align-items: center;
  617. }
  618. </style>
  619. <style lang="scss" scoped>
  620. .patent-fast-edit-popover {
  621. padding: 0 !important;
  622. .btn {
  623. color: #000;
  624. line-height: 30px;
  625. border-radius: 5px;
  626. padding-left: 10px;
  627. text-align: left;
  628. font-size: 14px;
  629. cursor: pointer;
  630. &:hover {
  631. background: #adadad;
  632. color: #fff;
  633. }
  634. }
  635. .disabled {
  636. cursor: not-allowed !important;
  637. }
  638. .bottom {
  639. text-align: right;
  640. color: #1e9fff;
  641. line-height: 40px;
  642. padding-left: 10px;
  643. font-size: 18px;
  644. }
  645. .el-divider--horizontal {
  646. margin: 10px 0 !important;
  647. }
  648. .select-number {
  649. .el-input {
  650. width: 70px;
  651. }
  652. span {
  653. padding: 0 3px;
  654. }
  655. }
  656. }
  657. </style>