smoothEdbDialog.vue 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797
  1. <template>
  2. <!-- 指数修匀计算弹窗 -->
  3. <el-dialog
  4. :visible.sync="isOpenSmooth"
  5. :close-on-click-modal="false"
  6. :modal-append-to-body="false"
  7. @close="cancelHandle"
  8. center
  9. width="1200px"
  10. top="3vh"
  11. v-dialogDrag
  12. class="smooth-edb-dialog"
  13. >
  14. <div slot="title" style="display: flex; align-items: center">
  15. <img
  16. :src="$icons.computed"
  17. style="color: #fff; width: 16px; height: 16px; margin-right: 5px"
  18. />
  19. <span style="font-size: 16px">指数修匀</span>
  20. </div>
  21. <div class="smooth-edb-dialog-wrap">
  22. <!-- 常规计算 -->
  23. <div class="normal-wrap" v-if="computedSource===1">
  24. <div class="min-top">
  25. <label >选择指标:</label>
  26. <el-select
  27. v-model="select_target"
  28. v-loadMore="searchLoad"
  29. :filterable="!select_target"
  30. clearable
  31. placeholder="请输入指标名称"
  32. style="width: 85%"
  33. remote
  34. :remote-method="getTarget"
  35. @click.native="inputFocusHandle"
  36. @change="chooseTarget"
  37. @blur="search_have_more = false"
  38. :disabled="operationForm.view"
  39. >
  40. <i slot="prefix" class="el-input__icon el-icon-search"></i>
  41. <el-option
  42. v-for="item in searchOptions"
  43. :key="item.EdbInfoId"
  44. :label="$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName"
  45. :value="item.EdbInfoId"
  46. >
  47. </el-option>
  48. </el-select>
  49. <i class="el-icon-tickets" style="color:#409EFF;font-size:18px" @click="handleSelectBtnClick" v-if="select_target"/>
  50. </div>
  51. <div class="middle">
  52. <label>已选指标:</label>
  53. <el-table
  54. :data="tableData"
  55. style="box-shadow: 0px 3px 6px rgba(155, 170, 219, 0.2);margin-top:10px;"
  56. border>
  57. <el-table-column
  58. v-for="item in tableColums"
  59. :key="item.label"
  60. :label="item.label"
  61. :width="item.widthsty"
  62. :min-width="item.minwidthsty"
  63. align="center"
  64. >
  65. <template slot-scope="scope">
  66. <span>{{ scope.row[item.key] }}</span>
  67. </template>
  68. </el-table-column>
  69. <el-table-column
  70. width="110"
  71. align="center"
  72. label="操作"
  73. v-if="!operationForm.view"
  74. >
  75. <template slot-scope="scope">
  76. <span class="deletesty" @click="delTarget">删除</span>
  77. </template>
  78. </el-table-column>
  79. <div slot="empty" style="padding:20px 0 30px;">
  80. <tableNoData text="暂无指标" size="mini"/>
  81. </div>
  82. </el-table>
  83. <ul
  84. class="data-ul"
  85. ref="dataUl"
  86. @scroll="scrollHandle"
  87. v-if="dataList.length">
  88. <li
  89. class="value-item"
  90. v-for="(item, index) in dataList"
  91. :key="item.EdbDataId"
  92. >
  93. <span class="value-label">
  94. <i class="new-tag" v-if="index === 0"></i>
  95. {{item.DataTime}}
  96. </span>
  97. <span class="value-label" style="min-width:200px;text-align:center;">{{item.Value}}</span>
  98. </li>
  99. </ul>
  100. <div class="form-cont">
  101. <el-form
  102. ref="form"
  103. label-position="right"
  104. inline
  105. label-width="80px"
  106. :model="formData"
  107. :rules="formRules"
  108. :disabled="operationForm.view"
  109. >
  110. <el-form-item label="指标名称" prop="targetName">
  111. <el-input
  112. v-model="formData.targetName"
  113. style="width: 340px"
  114. placeholder="请输入指标名称"
  115. />
  116. </el-form-item>
  117. <el-form-item label="单位" prop="unit">
  118. <selectUnit
  119. v-model="formData.unit"
  120. style="width: 340px"
  121. />
  122. </el-form-item>
  123. <el-form-item label="指标目录" prop="menu">
  124. <el-cascader v-if="isOpenSmooth"
  125. v-model="formData.menu"
  126. :options="catalogArr"
  127. :props="levelProps"
  128. clearable
  129. placeholder="请选择指标目录"
  130. />
  131. </el-form-item>
  132. <el-form-item label="频度" prop="frequency">
  133. <el-select
  134. v-model="formData.frequency"
  135. placeholder="请选择频度"
  136. style="width: 340px"
  137. clearable
  138. >
  139. <el-option
  140. v-for="item in frequencyArr"
  141. :key="item"
  142. :label="item"
  143. :value="item"
  144. >
  145. </el-option>
  146. </el-select>
  147. </el-form-item>
  148. <el-form-item label="alpha值" prop="alphaValue">
  149. <el-input
  150. v-model.trim="formData.alphaValue"
  151. style="width: 340px"
  152. placeholder="请输入alpha值"
  153. />
  154. </el-form-item>
  155. </el-form>
  156. </div>
  157. </div>
  158. </div>
  159. <!-- 批量计算 -->
  160. <div class="batch-wrap" v-else>
  161. <ul class="target-ul">
  162. <li class="target-li" v-for="(list, index) in targetList" :key="index">
  163. <span class="li-tag">{{ list.tag }}</span>
  164. <el-select v-model="list.target" v-loadMore="searchLoad" :filterable="!list.target" clearable
  165. placeholder="请输入指标名称" style="width: 400px" @change="(val)=>{chooseTargetList(val,index)}"
  166. @clear="clearHandle(index)" remote :remote-method="getTarget"
  167. @click.native="inputFocusHandle">
  168. <i slot="prefix" class="el-input__icon el-icon-search"></i>
  169. <el-option v-for="item in searchOptions" :key="item.EdbInfoId"
  170. :label="$parent.currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName"
  171. :value="item.EdbInfoId">
  172. </el-option>
  173. </el-select>
  174. <i class="el-icon-tickets" style="color:#409EFF;font-size:18px"
  175. @click="$emit('lookHistory',list.target)" v-if="list.target" />
  176. <i class="el-icon-error del-tag" v-if="index > 1" @click="delTargetList(index)" />
  177. <span class="target-date" v-if="list.start_date">{{
  178. `${list.start_date}至${list.end_date}`
  179. }}</span>
  180. </li>
  181. </ul>
  182. <span class="add-icon" @click="addTargetHandle">
  183. <i class="el-icon-circle-plus-outline" style="color: #5882ef; font-size: 16px" />
  184. 添加更多指标
  185. </span>
  186. <ul class="form-ul">
  187. <li class="form-li" v-for="(list, index) in targetList" :key="index">
  188. <span class="li-tag">{{ list.tag }}</span>
  189. <el-form :ref="`list_form_${index}`"
  190. label-position="right"
  191. inline
  192. label-width="0px"
  193. :model="targetList[index]"
  194. :rules="formRules"
  195. >
  196. <el-form-item prop="targetName">
  197. <el-input
  198. v-model="targetList[index].targetName"
  199. style="width: 240px"
  200. placeholder="请输入指标名称"
  201. />
  202. </el-form-item>
  203. <el-form-item prop="menu">
  204. <el-cascader v-if="isOpenSmooth"
  205. v-model="targetList[index].menu"
  206. :options="catalogArr"
  207. :props="levelProps"
  208. style="width: 200px"
  209. clearable
  210. placeholder="请选择指标目录"
  211. />
  212. </el-form-item>
  213. <el-form-item prop="unit">
  214. <selectUnit
  215. v-model="targetList[index].unit"
  216. style="width: 160px"
  217. />
  218. </el-form-item>
  219. <el-form-item prop="alphaValue">
  220. <el-input
  221. v-model.trim="targetList[index].alphaValue"
  222. style="width: 180px"
  223. placeholder="请输入alpha值"
  224. />
  225. </el-form-item>
  226. <el-form-item prop="frequency">
  227. <el-select
  228. v-model="targetList[index].frequency"
  229. placeholder="请选择频度"
  230. style="width: 180px"
  231. clearable
  232. >
  233. <el-option
  234. v-for="item in frequencyArr"
  235. :key="item"
  236. :label="item"
  237. :value="item"
  238. >
  239. </el-option>
  240. </el-select>
  241. </el-form-item>
  242. </el-form>
  243. </li>
  244. </ul>
  245. </div>
  246. <div class="dia-bot" v-if="!operationForm.view">
  247. <el-button
  248. type="primary"
  249. style="margin-right: 20px"
  250. @click="saveBtnClick"
  251. :loading="loading"
  252. >指数修匀计算</el-button
  253. >
  254. <el-button type="primary" plain @click="cancelHandle(operationForm.edb_id?'':'cancel')">取消</el-button>
  255. </div>
  256. <el-popover
  257. placement="top-start"
  258. width="500"
  259. trigger="click">
  260. <p style="padding:30px;line-height:25px;" v-html="$parent.tips.get('alpha')"/>
  261. <span slot="reference" class="tip-label">公式说明</span>
  262. </el-popover>
  263. </div>
  264. </el-dialog>
  265. </template>
  266. <script>
  267. import { dataBaseInterface } from '@/api/api.js';
  268. import * as preDictEdbInterface from '@/api/modules/predictEdbApi.js';
  269. import { formRules } from './util';
  270. const tag_arr = [];
  271. for(let i=0;i<26;i++) tag_arr.push(String.fromCharCode(65+i));
  272. export default {
  273. props:{
  274. isOpenSmooth:{
  275. type:Boolean,
  276. default:false
  277. },
  278. computedSource:{ //常规 or 批量
  279. type:Number,
  280. default:1
  281. },
  282. operationForm:{
  283. type:Object,
  284. default:()=>{return{
  285. edb_id:'',
  286. oldedb_id:''
  287. }}
  288. },
  289. isPredict:{ //是不是预测指标
  290. type:Boolean,
  291. default:false,
  292. }
  293. },
  294. data() {
  295. return {
  296. /* 常规 */
  297. formData:{
  298. targetName:'',
  299. unit:'',
  300. menu:'',
  301. frequency:'',
  302. alphaValue:''
  303. },
  304. formRules,
  305. frequencyArr: ['日度', '周度','旬度', '月度', '季度', '年度'],
  306. catalogArr:[],
  307. levelProps: {
  308. label: 'ClassifyName',
  309. value: 'ClassifyId',
  310. children: 'Children',
  311. emitPath: false,
  312. checkStrictly: true
  313. },
  314. select_target:'',
  315. search_page:1,
  316. search_have_more:false,
  317. searchOptions:[],
  318. current_search:'',
  319. tableData:[],
  320. page_no:1,
  321. haveMore:false,
  322. tableColums:[
  323. {
  324. label: '指标ID',
  325. key: 'EdbCode',
  326. },
  327. {
  328. label: '指标名称',
  329. key: 'EdbName',
  330. },
  331. {
  332. label: '频度',
  333. key: 'Frequency',
  334. },
  335. {
  336. label: '单位',
  337. key: 'Unit',
  338. },
  339. {
  340. label: '起始时间',
  341. key: 'StartDate',
  342. minwidthsty: '100px'
  343. },
  344. {
  345. label: '更新时间',
  346. key: 'ModifyTime',
  347. minwidthsty: '110px'
  348. },
  349. {
  350. label: '来源',
  351. key: 'SourceName',
  352. },
  353. ],
  354. dataList:[],
  355. /* 批量 */
  356. targetList:[/* {
  357. tag:'A',
  358. target:123456 //edbid
  359. ...formData
  360. } */],
  361. formDataList:[],
  362. loading:false,
  363. };
  364. },
  365. watch:{
  366. isOpenSmooth(newVal){
  367. if(newVal){
  368. this.getMenu()
  369. if(this.operationForm.edb_id){
  370. this.select_target = this.operationForm.oldedb_id
  371. this.getDataList()
  372. this.setDefaultOption(this.operationForm,'edit')
  373. //回显时的默认options
  374. this.searchOptions = [
  375. {
  376. EdbInfoId: this.operationForm.oldedb_id,
  377. EdbName: this.operationForm.oldEdb_name,
  378. }
  379. ]
  380. }
  381. if(this.computedSource===2){
  382. this.addTargetHandle()
  383. this.addTargetHandle()
  384. }
  385. }
  386. }
  387. },
  388. methods: {
  389. init(){
  390. this.$refs.form&&(this.$refs.form.resetFields());
  391. Object.assign(this.$data, this.$options.data());
  392. },
  393. searchLoad() {
  394. if(!this.search_have_more) return;
  395. this.searchApi(this.current_search,++this.search_page)
  396. },
  397. async searchApi(query,page=1){
  398. const params = {
  399. KeyWord:query,
  400. CurrentIndex: page,
  401. }
  402. const res = this.isPredict
  403. ? await preDictEdbInterface.edbSearch(params)
  404. : await dataBaseInterface.targetSearchByPage(params)
  405. if(res.Ret !== 200) return
  406. const { List,Paging } = res.Data;
  407. this.search_have_more = page < Paging.Pages;
  408. let arr = page === 1 ? List : this.searchOptions.concat(List);
  409. this.searchOptions = arr;
  410. },
  411. /* 指标列表 */
  412. getTarget(query) {
  413. this.search_page = 1;
  414. this.current_search = query;
  415. this.searchApi(this.current_search);
  416. },
  417. /* 聚焦获取当前检索 */
  418. inputFocusHandle(e) {
  419. this.search_page = 1;
  420. this.current_search = e.target.value;
  421. this.searchApi(this.current_search);
  422. },
  423. /* 获取目录结构 */
  424. async getMenu() {
  425. const res = this.isPredict
  426. ? await preDictEdbInterface.classifyListV2()
  427. : await dataBaseInterface.menuListV3()
  428. if(res.Ret!==200) return
  429. // this.catalogArr = res.Data.AllNodes || [];
  430. if(!this.isPredict){
  431. this.filterNodes(res.Data.AllNodes||[]);
  432. this.catalogArr = res.Data.AllNodes || [];
  433. }else{
  434. this.catalogArr = res.Data.AllNodes || [];
  435. }
  436. },
  437. // 递归改变第三级目录结构
  438. filterNodes(arr) {
  439. arr.length &&
  440. arr.forEach((item) => {
  441. item.Children.length && this.filterNodes(item.Children);
  442. if (!item.Children.length) {
  443. delete item.Children;
  444. }
  445. });
  446. },
  447. /* 选择指标 */
  448. chooseTarget(val) {
  449. if(val) {
  450. let obj = this.searchOptions.find(item => item.EdbInfoId === val);
  451. //同步指标信息
  452. this.setDefaultOption(obj);
  453. this.page_no = 1;
  454. this.dataList.length ? this.$refs.dataUl.scrollTop = 0 : null;
  455. this.getDataList()
  456. }else {
  457. this.tableData = [];
  458. this.dataList = [];
  459. }
  460. },
  461. chooseTargetList(val,index){
  462. if(val){
  463. const obj = this.searchOptions.find(item => item.EdbInfoId === val);
  464. this.targetList[index].targetName = `${obj.EdbName}指数修匀`
  465. this.targetList[index].unit = obj.Unit
  466. this.targetList[index].frequency = obj.Frequency
  467. this.targetList[index].menu = obj.ClassifyId||''
  468. this.targetList[index].alphaValue =obj.Formula||''
  469. }
  470. },
  471. setDefaultOption(obj,type){
  472. this.formData = {
  473. targetName:`${obj.EdbName}${type==='edit'?'':'指数修匀'}`,
  474. unit:obj.Unit,
  475. frequency:obj.Frequency,
  476. menu:obj.ClassifyId||'',
  477. alphaValue:obj.Formula||''
  478. }
  479. },
  480. async getDataList(){
  481. const params = {
  482. PageSize: 10,
  483. CurrentIndex: this.page_no,
  484. EdbInfoId: this.select_target,
  485. }
  486. const res = this.isPredict
  487. ? await preDictEdbInterface.edbDataInfo(params)
  488. : await dataBaseInterface.targetList(params)
  489. if(res.Ret!==200) return
  490. if(res.Data){
  491. res.Data.Item.ModifyTime = res.Data.Item.ModifyTime.substr(0,10);
  492. this.tableData = [res.Data.Item] || [];
  493. this.haveMore = this.page_no < res.Data.Paging.Pages ? true : false;
  494. this.dataList = this.page_no === 1 ? (res.Data.Item.DataList || []) : this.dataList.concat(res.Data.Item.DataList);
  495. }else{
  496. this.tableData = [];
  497. this.dataList = [];
  498. }
  499. },
  500. handleSelectBtnClick(){
  501. //计算指标打开弹窗,基础指标打开新页面
  502. if(this.tableData[0].EdbType===2){
  503. this.$emit('lookHistory',this.select_target)
  504. }else{
  505. const {ClassifyId,UniqueCode,EdbInfoId} = this.tableData[0]
  506. let {href} = this.$router.resolve({path:`/database`,query:{code:UniqueCode,id:EdbInfoId,classifyId:ClassifyId}});
  507. window.open(href,'_blank');
  508. }
  509. },
  510. scrollHandle(e){
  511. const dom = e.target
  512. let scrollTop = dom.scrollTop; //滑入屏幕上方的高度
  513. let windowHeitht = dom.clientHeight; //页面的高度
  514. let scrollHeight = dom.scrollHeight; //整个div的高度
  515. let total = scrollTop + windowHeitht
  516. if(total >= scrollHeight && this.haveMore){
  517. this.page_no ++;
  518. this.getDataList();
  519. }
  520. },
  521. /* 删除已选指标 */
  522. delTarget() {
  523. this.tableData = [];
  524. this.dataList = [];
  525. this.select_target = '';
  526. this.page_no = 1;
  527. },
  528. delTargetList(index){
  529. this.targetList.splice(index, 1);
  530. },
  531. clearHandle(index){
  532. const item = {...{tag:tag_arr[index],target:''},..._.cloneDeep(this.formData)}
  533. this.targetList.splice(index,1,item)
  534. },
  535. addTargetHandle(){
  536. if(this.targetList.length >= 26){
  537. this.$message.warning('添加指标个数已达上限')
  538. return
  539. }
  540. let tag = 'A'
  541. let index = -1
  542. if(this.targetList.length>=1){
  543. tag = this.targetList[this.targetList.length-1].tag;
  544. index = tag_arr.findIndex(item => item === tag);
  545. }
  546. const item = {...{tag:tag_arr[index+1],target:''},..._.cloneDeep(this.formData)}
  547. this.targetList.push(item)
  548. },
  549. saveBtnClick(){
  550. this.computedSource===1?this.saveHandle():this.saveListHandle()
  551. },
  552. //常规编辑/保存指标
  553. async saveHandle(){
  554. if(!this.select_target){
  555. this.$message.warning('指标不能为空')
  556. return
  557. }
  558. await this.$refs.form.validate();
  559. this.loading = true;
  560. const {targetName,unit,menu,frequency,alphaValue} = this.formData
  561. let params = {
  562. Source:this.$route.path==='/database'?72:73,
  563. EdbName:targetName,
  564. Unit:unit,
  565. ClassifyId:menu,
  566. Frequency:frequency,
  567. Formula:alphaValue,
  568. FromEdbInfoId:this.select_target
  569. }
  570. let res = null
  571. if(this.isPredict){
  572. let edit_params = { ...params,EdbInfoId: this.operationForm.edb_id }
  573. res = await preDictEdbInterface.operateEdbSave(this.operationForm.edb_id ? edit_params : params)
  574. }else{
  575. res = this.operationForm.edb_id
  576. ? await dataBaseInterface.calculateTargetEdit({ ...params,EdbInfoId: this.operationForm.edb_id })
  577. : await dataBaseInterface.calculateTargetSave(params)
  578. }
  579. if(res.Ret!==200) return
  580. this.$message.success(res.Msg)
  581. this.operationForm.edb_id
  582. ? this.$emit('addCallBack','edit')
  583. : this.$emit('addCallBack','add',{ code:res.Data.UniqueCode,id:res.Data.EdbInfoId,classifyId:params.ClassifyId });
  584. this.init();
  585. this.loading = false;
  586. },
  587. //批量添加指标
  588. async saveListHandle(){
  589. //只添加选择了指标的
  590. const targetCheck = this.targetList.filter(item=>item.target)
  591. /* if(targetCheck.length!==this.targetList.length){
  592. this.$message.warning('请选择指标')
  593. return
  594. } */
  595. //只验证选择了指标的form-rules
  596. for(let i = 0;i<targetCheck.length;i++){
  597. const index = tag_arr.findIndex(item=>item===targetCheck[i].tag)
  598. await this.$refs[`list_form_${index}`][0].validate();
  599. }
  600. this.loading = true
  601. const params = targetCheck.map(item=>{
  602. return {
  603. CalculateId: item.tag,
  604. CalculateInfo: {
  605. ClassifyId: item.menu,
  606. EdbName: item.targetName,
  607. Formula: item.alphaValue,
  608. Frequency:item.frequency,
  609. FromEdbInfoId: item.target,
  610. Source:this.$route.path==='/database'?72:73,
  611. Unit: item.unit
  612. }
  613. }
  614. })
  615. const res = this.$route.path==='/database'
  616. ? await dataBaseInterface.batchCalculateTargetAdd(params)
  617. : await preDictEdbInterface.batchCalculateTargetAdd(params)
  618. if(res.Ret !== 200) return
  619. const { Fail,Success } = res.Data;
  620. if(Fail.length) {
  621. let message = '';
  622. Fail.forEach(item => {
  623. message+=`${item.CalculateId}:${item.Msg}</br>`
  624. })
  625. this.$message({
  626. dangerouslyUseHTMLString: true,
  627. message,
  628. type: 'error'
  629. })
  630. this.dealFailHandle(Fail)
  631. }else {
  632. this.$message.success('添加成功');
  633. this.init();
  634. this.$emit('addCallBack','add',{ code:Success[0].UniqueCode,id:Success[0].EdbInfoId,classifyId:Success[0].ClassifyId});
  635. this.loading = false;
  636. }
  637. },
  638. dealFailHandle(arr){
  639. //从targetList中剔除成功的指标,重新赋予剩下的指标tag
  640. const failTagArr = arr.map(_ =>_.CalculateId);
  641. this.targetList = this.targetList.filter(_ => failTagArr.includes(_.tag));
  642. this.targetList.forEach((item,index)=>{
  643. item.tag = tag_arr[index]
  644. })
  645. this.loading = false;
  646. },
  647. cancelHandle(type) {
  648. this.init();
  649. this.$emit('cancel');
  650. type==='cancel' && this.$emit('openPrev');
  651. },
  652. },
  653. };
  654. </script>
  655. <style lang="scss">
  656. .smooth-edb-dialog{
  657. .el-dialog__body{
  658. padding: 25px 25px 30px !important;
  659. padding-bottom: 5px !important;
  660. }
  661. }
  662. .smooth-edb-dialog-wrap{
  663. .el-cascader .el-input {
  664. width: 340px;
  665. }
  666. .min-top {
  667. padding: 20px 30px;
  668. border: 1px solid #ECECEC;
  669. box-shadow: 0px 3px 6px rgba(0, 0, 0, 0.05);
  670. border-radius:4px;
  671. }
  672. .middle {
  673. margin-top: 20px;
  674. .data-ul {
  675. margin-top: 5px;
  676. border-bottom: 1px solid #dcdfe6;
  677. max-height: 140px;
  678. overflow-y: auto;
  679. .value-item {
  680. padding: 14px 0;
  681. border: 1px solid #dcdfe6;
  682. border-bottom: none;
  683. display: flex;
  684. justify-content: space-around;
  685. .value-label {
  686. position: relative;
  687. color: #666;
  688. }
  689. .new-tag {
  690. width: 6px;
  691. height: 6px;
  692. display: inline-block;
  693. position: absolute;
  694. left: -12px;
  695. top: 50%;
  696. transform: translateY(-50%);
  697. border-radius: 50%;
  698. background: #f00;
  699. }
  700. }
  701. }
  702. .form-cont {
  703. padding-top: 30px;
  704. margin-top: 30px;
  705. border-top: 1px dashed #AAB4CC;
  706. input::-webkit-outer-spin-button,
  707. input::-webkit-inner-spin-button {
  708. -webkit-appearance: none;
  709. }
  710. input[type="number"]{
  711. -moz-appearance: textfield;
  712. }
  713. }
  714. }
  715. .dia-bot {
  716. padding: 20px 0 30px;
  717. display: flex;
  718. justify-content: center;
  719. }
  720. .tip-label {
  721. position: absolute;
  722. bottom: 30px;
  723. right: 30px;
  724. color: #409EFF;
  725. cursor: pointer;
  726. }
  727. .batch-wrap{
  728. padding:0 40px;
  729. .target-ul {
  730. display: flex;
  731. flex-wrap: wrap;
  732. justify-content: space-between;
  733. .target-li {
  734. position: relative;
  735. margin-bottom: 30px;
  736. .li-tag {
  737. font-size: 16px;
  738. margin-right: 8px;
  739. }
  740. .del-tag {
  741. position: absolute;
  742. right: -30px;
  743. top: 12px;
  744. font-size: 16px;
  745. cursor: pointer;
  746. }
  747. .target-date {
  748. color: #5882ef;
  749. position: absolute;
  750. bottom: -25px;
  751. left: 24px;
  752. }
  753. }
  754. }
  755. .add-icon {
  756. font-size: 16px;
  757. color: #5882ef;
  758. cursor: pointer;
  759. }
  760. .form-ul {
  761. padding-top: 20px;
  762. margin-top: 20px;
  763. border-top: 1px dashed #AAB4CC;
  764. .form-li {
  765. display: flex;
  766. align-items: center;
  767. margin-bottom: 15px;
  768. .el-cascader>.el-input{
  769. width:100%;
  770. }
  771. .el-form-item{
  772. margin-bottom: 0;
  773. }
  774. .li-tag{
  775. margin-right: 20px;
  776. }
  777. }
  778. }
  779. }
  780. }
  781. </style>