addLInkDia.vue 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710
  1. <template>
  2. <el-dialog :modal-append-to-body='false' :title="$t('SandboxManage.SandFlow.add_link')" :visible.sync="show"
  3. :close-on-click-modal="false" width="872px" top="5vh" @close="cancelHandle">
  4. <div class="add-link-box">
  5. <div class="link-box-option">
  6. <el-select v-model="addLinkSearchParams.linkType" placeholder="链接类型" style="width: 240px;" @change="changeLinkType">
  7. <el-option :label="item.label" :value="item.value" v-for="item in linkTypeList" :key="item.value"></el-option>
  8. </el-select>
  9. <el-select v-if="addLinkSearchParams.linkType==1"
  10. v-model="search_dataBaseId"
  11. v-loadMore="dataBaseSearchLoad"
  12. ref="searchRef"
  13. :filterable="!search_dataBaseId"
  14. remote
  15. clearable
  16. :placeholder="$t('SandboxManage.SandFlow.add_link_search_placeholder')"
  17. style="width: 240px"
  18. :remote-method="dataBaseSearch"
  19. @click.native="dataBaseInputFocus"
  20. >
  21. <i slot="prefix" class="el-input__icon el-icon-search"></i>
  22. <el-option
  23. v-for="item in dataBaseOptions"
  24. :key="item.EdbInfoId"
  25. :label="currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName"
  26. :value="item.EdbInfoId"
  27. :disabled="!item.HaveOperaAuth"
  28. >
  29. <div>
  30. <img
  31. :src="$icons.lock_ico2"
  32. width="18"
  33. height="18"
  34. style="vertical-align:middle"
  35. v-if="!item.HaveOperaAuth"
  36. />
  37. {{currentLang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName}}
  38. </div>
  39. </el-option>
  40. </el-select>
  41. <el-select v-else-if="addLinkSearchParams.linkType==2"
  42. v-model="search_dataBaseId"
  43. v-loadMore="dataBaseSearchLoad"
  44. ref="searchRef"
  45. :filterable="!search_dataBaseId"
  46. remote
  47. clearable
  48. :placeholder="$t('Chart.Detail.chart_name')"
  49. style="width: 240px"
  50. :remote-method="dataBaseSearch"
  51. @click.native="dataBaseInputFocus"
  52. >
  53. <i slot="prefix" class="el-input__icon el-icon-search"></i>
  54. <el-option
  55. v-for="item in dataBaseOptions"
  56. :key="item.ChartInfoId"
  57. :label="currentLang==='en'?(item.ChartNameEn||item.ChartName):item.ChartName"
  58. :value="item.ChartInfoId"
  59. :disabled="!item.HaveOperaAuth"
  60. >
  61. <div>
  62. <img
  63. :src="$icons.lock_ico2"
  64. width="18"
  65. height="18"
  66. style="vertical-align:middle"
  67. v-if="!item.HaveOperaAuth"
  68. />
  69. {{currentLang==='en'?(item.ChartNameEn||item.ChartName):item.ChartName}}
  70. </div>
  71. </el-option>
  72. </el-select>
  73. <el-input v-else v-model="reportKeyWord" @input="searchReport"
  74. :placeholder="$t('ReportManage.smart_title_creator_btn')" style="width: 240px;" clearable >
  75. <i slot="prefix" class="el-input__icon el-icon-search"></i>
  76. </el-input>
  77. </div>
  78. <div class="link-box-content">
  79. <!-- 指标 -->
  80. <div class="link-content-dataIndex" v-if="addLinkSearchParams.linkType==1 && databaseTableData && databaseTableData.length>0">
  81. <template v-if="databaseTableData[0].HaveOperaAuth">
  82. <el-table :data="databaseTableData" border style="box-shadow: rgba(155, 170, 219, 0.2) 0px 3px 6px;">
  83. <el-table-column :label="$t('Table.edb_id')" align="center">
  84. <template slot-scope="scope">{{ scope.row.EdbCode }}</template>
  85. </el-table-column>
  86. <el-table-column :label="$t('Table.edb_name')" align="center" width="200">
  87. <template slot-scope="scope">{{ currentLang==='en'?(scope.row.EdbNameEn||scope.row.EdbName):scope.row.EdbName }}</template>
  88. </el-table-column>
  89. <el-table-column :label="$t('Table.frequency')" align="center" width="50">
  90. <template slot-scope="scope">{{ getFrequencyTrans(scope.row.Frequency||'null') }}</template>
  91. </el-table-column>
  92. <el-table-column :label="$t('Table.unit')" align="center">
  93. <template slot-scope="scope">{{ currentLang==='en'?(scope.row.UnitEn||getUnitTrans(scope.row.Unit)):getUnitTrans(scope.row.Unit) }}</template>
  94. </el-table-column>
  95. <el-table-column :label="$t('Table.start_time')" align="center" width="100">
  96. <template slot-scope="scope">{{ scope.row.StartDate }}</template>
  97. </el-table-column>
  98. <el-table-column :label="$t('Table.update_time')" align="center" width="160">
  99. <template slot-scope="scope">{{ scope.row.ModifyTime }}</template>
  100. </el-table-column>
  101. <el-table-column :label="$t('Table.source')" align="center">
  102. <template slot-scope="scope">{{ scope.row.SourceName }}</template>
  103. </el-table-column>
  104. <el-table-column :label="$t('Table.column_operations')" align="center" width="50">
  105. <template slot-scope="scope">
  106. <span class="delete-button">{{$t('Table.delete_btn')}}</span>
  107. </template>
  108. </el-table-column>
  109. </el-table>
  110. <ul
  111. class="value-ul"
  112. ref="valueUl"
  113. @scroll="databaseScrollHandle"
  114. v-show="databaseList.length">
  115. <li
  116. class="value-item"
  117. v-for="item in databaseList"
  118. :key="item.EdbDataId"
  119. >
  120. <span class="value-label">
  121. <span style="position: relative;">
  122. <i class="new-tag" v-if="databaseTableData[0].LatestDate===item.DataTime"></i>
  123. {{item.DataTime}}
  124. </span>
  125. </span>
  126. <span :class="['value-label',{'predict-act': databaseTableData[0].DataInsertConfig.Date===item.DataTime}]" style="min-width:200px;text-align:center;">
  127. <span :class="['value-style',{'predict-act': databaseTableData[0].DataInsertConfig.Date===item.DataTime}]">{{item.Value}}</span>
  128. </span>
  129. </li>
  130. <li class="nodata value-item" v-if="!databaseList.length">{{$t('Table.prompt_slogan')}}</li>
  131. </ul>
  132. </template>
  133. <noDataAuth v-if="databaseTableData[0].HaveOperaAuth===false" :text="$t('MsgPrompt.no_edb_auth')"/>
  134. </div>
  135. <div class="link-content-chartIndex" v-else-if="addLinkSearchParams.linkType==2 && this.chartInfo && this.chartInfo.ChartInfoId">
  136. <template v-if="chartInfo.HaveOperaAuth">
  137. <div class="chart-name">{{ currentLang==='en'?(chartInfo.ChartNameEn||chartInfo.ChartName):chartInfo.ChartName }}</div>
  138. <Chart :options="options" :chartInfo="chartInfo" ref="chartRef" />
  139. </template>
  140. <noDataAuth v-if="chartInfo.HaveOperaAuth===false" :text="$t('MsgPrompt.no_chart_auth')"/>
  141. </div>
  142. <div class="link-content-dataIndex" v-else-if="addLinkSearchParams.linkType==3 && this.reportList.length>0">
  143. <el-table :data="this.reportList" border style="margin-bottom: 10px;" ref="reportTable"
  144. @select="reportSelect" @select-all="reportSelect">
  145. <el-table-column type="selection" width="40" align="center"></el-table-column>
  146. <el-table-column :label="$t('Table.report_title')" align="center" show-overflow-tooltip>
  147. <template slot-scope="scope">
  148. <span >{{ scope.row.Title }}</span>
  149. <span v-if="scope.row.MsgSendTime">
  150. ({{ scope.row.MsgSendTime.substring(5, 7)}}{{ scope.row.MsgSendTime.substring(8, 10) }})
  151. </span>
  152. <span v-else-if="scope.row.PublishTime">
  153. ({{ scope.row.PublishTime.substring(5, 7)}}{{ scope.row.PublishTime.substring(8, 10) }})
  154. </span>
  155. <span v-else-if="scope.row.CreateTime">
  156. ({{ scope.row.CreateTime.substring(5, 7)}}{{ scope.row.CreateTime.substring(8, 10) }})
  157. </span>
  158. </template>
  159. </el-table-column >
  160. <el-table-column :label="$t('Table.publish_time')" align="center">
  161. <template slot-scope="scope">
  162. <span>{{scope.row.PrePublishTime?scope.row.PrePublishTime:scope.row.PublishTime}}</span>
  163. </template>
  164. </el-table-column>
  165. </el-table>
  166. <m-page :page_no="reportParams.CurrentIndex" :pageSize="5" :total="reportTotal" @handleCurrentChange="pageChange"/>
  167. </div>
  168. <tableNoData :text="$t('Table.prompt_slogan')" v-else/>
  169. </div>
  170. <div class="link-box-tags">
  171. <div class="link-box-tag" v-for="(item,index) in checkedLinkList" :key="item.RId">
  172. <span @dblclick.stop="editLinkName(item)" v-if="!item.editing" @click="linkClick(item)">{{ item.Name }}</span>
  173. <el-input v-else @blur="editLinkNameFinish(item)"
  174. v-model.trim="editingLabel" class="label-edit-input" ref="labelEditInput"/>
  175. <img src="~@/assets/img/sand_new/delete_outline_1.png" @click="linkDelete(item,index)">
  176. </div>
  177. </div>
  178. <div class="link-box-buttons">
  179. <el-button type="info" style="width:120px;color:#333333;background-color:#F4F8FE" @click="cancelHandle">{{$t('Dialog.cancel_btn')}}</el-button>
  180. <el-button type="primary" style="width:120px;margin-left: 30px;" @click="saveLink">{{$t('Dialog.confirm_btn')}}</el-button>
  181. </div>
  182. </div>
  183. </el-dialog>
  184. </template>
  185. <script>
  186. import { chartSetMixin } from '../../../dataEntry_manage/mixins/chartPublic'
  187. import * as sheetInterface from "@/api/modules/sheetApi.js";
  188. import mPage from "@/components/mPage.vue";
  189. import Chart from '../../../dataEntry_manage/components/chart.vue'
  190. import { dataBaseInterface,reportlist} from '@/api/api.js';
  191. import * as preDictEdbInterface from '@/api/modules/predictEdbApi.js';
  192. export default {
  193. components:{
  194. mPage,Chart
  195. },
  196. props:{
  197. show:{
  198. reuqired:true,
  199. type:Boolean
  200. },
  201. linkList:{
  202. type:Array,
  203. default:()=>[]
  204. }
  205. },
  206. mixins:[chartSetMixin],
  207. watch:{
  208. /* 选中搜索指标 展开目录 选中指标 展示数据 */
  209. search_dataBaseId(newval) {
  210. if (newval) {
  211. if(this.addLinkSearchParams.linkType==1){
  212. let search_obj = this.dataBaseOptions.find(
  213. (item) => item.EdbInfoId === newval
  214. );
  215. if(search_obj){
  216. this.activeItem = {
  217. RId:this.addLinkSearchParams.linkType+'-'+search_obj.EdbInfoId,
  218. Id:search_obj.EdbInfoId,
  219. Name:this.currentLang==='en'?(search_obj.EdbNameEn||search_obj.EdbName):search_obj.EdbName,
  220. Type:this.addLinkSearchParams.linkType,
  221. editing:false,
  222. databaseType:search_obj.EdbInfoType, //0 普通指标 | 1 预测指标
  223. detailParams:{
  224. code:search_obj.UniqueCode,
  225. id:search_obj.EdbInfoId,
  226. classifyId:search_obj.ClassifyId
  227. }
  228. }
  229. this.checkedLinkList.push(this.activeItem)
  230. this.activeItemRId=this.addLinkSearchParams.linkType+'-'+search_obj.EdbInfoId
  231. this.initGetData()
  232. }
  233. }else{
  234. let search_obj = this.dataBaseOptions.find(
  235. (item) => item.ChartInfoId === newval
  236. );
  237. if(search_obj){
  238. this.activeItem = {
  239. RId:this.addLinkSearchParams.linkType+'-'+search_obj.ChartInfoId,
  240. Id:search_obj.ChartInfoId,
  241. Name: this.currentLang==='en'?(search_obj.ChartNameEn||search_obj.ChartName):search_obj.ChartName,
  242. Type:this.addLinkSearchParams.linkType,
  243. editing:false,
  244. detailParams:{
  245. code:search_obj.UniqueCode,
  246. id:search_obj.ChartInfoId
  247. }
  248. }
  249. this.checkedLinkList.push(this.activeItem)
  250. this.activeItemRId=this.addLinkSearchParams.linkType+'-'+search_obj.ChartInfoId
  251. this.getChartDetail(search_obj.ChartInfoId)
  252. }
  253. }
  254. }
  255. },
  256. edbData: {
  257. handler(newval, oldval) {
  258. newval.length && !this.chartInfo.WarnMsg && this.setChartOptionHandle(newval);
  259. },
  260. deep: true,
  261. },
  262. show(value){
  263. if(value){
  264. this.checkedLinkList = JSON.parse(JSON.stringify(this.linkList))
  265. let firstCheckedLink = this.checkedLinkList[0]
  266. if(firstCheckedLink){
  267. this.activeItemRId=''
  268. this.linkClick(firstCheckedLink)
  269. }else{
  270. this.addLinkSearchParams.linkType=1
  271. }
  272. this.changeLinkType()
  273. }
  274. }
  275. },
  276. computed:{
  277. linkTypeList(){
  278. return [
  279. {value:1,label:this.$t('SandboxManage.SandFlow.link_type_opt1')},
  280. {value:2,label:this.$t('SandboxManage.SandFlow.link_type_opt2')},
  281. {value:3,label:this.$t('SandboxManage.SandFlow.link_type_opt3')}
  282. ]
  283. }
  284. },
  285. data() {
  286. return {
  287. addLinkSearchParams:{
  288. linkType:1
  289. },
  290. //添加链接:指标
  291. search_dataBaseId:'',
  292. dataBaseParams:{
  293. pages:1,
  294. searchText:'',
  295. search_have_more:false
  296. },
  297. dataBaseOptions:[],
  298. databaseTableData:[],
  299. databaseList:[],
  300. databaseHaveMore:false,
  301. databasePageNo:1,
  302. chartInfo:{},
  303. edbData:[],
  304. options:{},
  305. reportKeyWord:'',
  306. reportParams:{
  307. CurrentIndex:1,
  308. PageSize:5,
  309. },
  310. reportList:[],
  311. selections:[],
  312. checkedLinkList:[],
  313. reportTotal:0,
  314. editingLabel:'',
  315. activeItemRId:'',
  316. activeItem:''
  317. }
  318. },
  319. methods: {
  320. // -------------------------------添加链接
  321. changeLinkType(){
  322. this.search_dataBaseId=''
  323. this.dataBaseOptions=[]
  324. this.dataBaseParams={
  325. pages:1,
  326. searchText:'',
  327. search_have_more:false
  328. }
  329. this.databaseTableData=[]
  330. this.databaseList=[]
  331. this.databaseHaveMore=false
  332. this.databasePageNo=1
  333. this.chartInfo={}
  334. this.edbData=[]
  335. this.reportKeyWord=''
  336. this.reportList=[]
  337. },
  338. /* 搜索 */
  339. dataBaseSearch(query) {
  340. this.dataBaseParams.pages = 1;
  341. this.dataBaseParams.searchText = query;
  342. this.dataBaseSearchApi(this.dataBaseParams.searchText)
  343. },
  344. // 加载更多
  345. dataBaseSearchLoad() {
  346. if(!this.dataBaseParams.search_have_more) return;
  347. this.dataBaseSearchApi(this.dataBaseParams.searchText,++this.dataBaseParams.pages);
  348. },
  349. /* 聚焦获取当前检索 */
  350. dataBaseInputFocus(e) {
  351. this.dataBaseParams.pages = 1;
  352. this.dataBaseParams.searchText = e.target.value;
  353. if(this.dataBaseParams.searchText) {
  354. this.dataBaseSearchApi(this.dataBaseParams.searchText);
  355. }else {
  356. this.searchOptions = [];
  357. this.dataBaseParams.search_have_more=false
  358. }
  359. },
  360. dataBaseSearchApi(query,page=1) {
  361. if(this.addLinkSearchParams.linkType==1){
  362. sheetInterface.searchTarget({
  363. KeyWord:query,
  364. CurrentIndex: page
  365. }).then(res => {
  366. if(res.Ret !== 200) return
  367. const { List,Paging } = res.Data;
  368. this.dataBaseParams.search_have_more = page < Paging.Pages;
  369. this.dataBaseOptions = page === 1 ? List : this.dataBaseOptions.concat(List);
  370. })
  371. }else{
  372. dataBaseInterface.chartSearchByEs({
  373. Keyword: query,
  374. IsShowMe:false,
  375. CurrentIndex: page
  376. })
  377. .then((res) => {
  378. if (res.Ret !== 200) return
  379. const { List,Paging } = res.Data;
  380. this.dataBaseParams.search_have_more = page < Paging.Pages;
  381. this.dataBaseOptions = page === 1 ? List : [...this.dataBaseOptions,...List];
  382. });
  383. }
  384. },
  385. initGetData() {
  386. this.databasePageNo = 1;
  387. if(this.$refs.edb_detail_data){
  388. this.$refs.valueUl.scrollTop=0
  389. }
  390. this.getDatabaseList();
  391. },
  392. getDatabaseList(){
  393. // 0-普通指标 1-预测指标
  394. let api = this.activeItem.databaseType==0?(dataBaseInterface.targetList):(preDictEdbInterface.edbDataInfo)
  395. api({
  396. PageSize: 20,
  397. CurrentIndex: this.databasePageNo,
  398. EdbInfoId: this.search_dataBaseId || this.activeItem.Id,
  399. }).then(res => {
  400. if(res.Ret === 200) {
  401. if(res.Data) {
  402. this.databaseTableData = [res.Data.Item] || [];
  403. this.databaseHaveMore = this.databasePageNo < res.Data.Paging.Pages ? true : false;
  404. this.databaseList = this.databasePageNo === 1 ? (res.Data.Item.DataList || []) : this.databaseList.concat(res.Data.Item.DataList);
  405. }else {
  406. this.databaseTableData = [];
  407. this.databaseList = [];
  408. }
  409. }
  410. })
  411. },
  412. databaseScrollHandle:_.throttle(function() {
  413. let scrollTop = this.$refs.valueUl.scrollTop;
  414. let clientHeight = this.$refs.valueUl.clientHeight;
  415. let scrollHeight = this.$refs.valueUl.scrollHeight;
  416. if(scrollTop===0) return
  417. if(scrollTop + clientHeight >= scrollHeight-10 && this.databaseHaveMore){
  418. this.databasePageNo++
  419. this.getDatabaseList()
  420. }
  421. },200),
  422. async getChartDetail(ChartInfoId) {
  423. const res = await dataBaseInterface.getChartInfoById({ChartInfoId})
  424. if (res.Ret !== 200) return;
  425. this.chartInfo = res.Data.ChartInfo || {}
  426. this.edbData = res.Data.EdbInfoList|| []
  427. //初始化上下限
  428. this.setLimitData(this.edbData)
  429. const chartTypeMap = {
  430. 7: this.initBarData, //柱形图
  431. 10: this.initSectionScatterData, //截面散点
  432. 11: this.initRadarData(res.Data)
  433. }
  434. chartTypeMap[this.chartInfo.ChartType] && chartTypeMap[this.chartInfo.ChartType](res.Data);
  435. },
  436. editLinkName(item){
  437. this.editingLabel = item.Name
  438. item.editing=true
  439. this.$nextTick(() => {
  440. this.$refs.labelEditInput[0].focus();
  441. });
  442. },
  443. // 链接点击
  444. /*
  445. config.noInfo - 研报类型的不提示
  446. */
  447. linkClick(item,config={}){
  448. if(this.activeItemRId == item.RId) return
  449. this.activeItemRId = item.RId
  450. this.activeItem = item
  451. this.addLinkSearchParams.linkType=item.Type
  452. if(item.Type==3){
  453. if(!config.noInfo){
  454. this.$message.info('研报类型的暂无回显')
  455. }
  456. }else if(item.Type==1){
  457. this.changeLinkType()
  458. this.initGetData()
  459. }else if(item.Type==2){
  460. this.changeLinkType()
  461. this.getChartDetail(item.Id)
  462. }
  463. },
  464. linkDelete(item,index){
  465. let rId = item.RId
  466. this.checkedLinkList.splice(index,1)
  467. if(this.activeItemRId == rId){
  468. let firstCheckedLink = this.checkedLinkList[0]
  469. if(firstCheckedLink){
  470. this.linkClick(firstCheckedLink,{noInfo:true})
  471. }else{
  472. this.activeItemRId = ""
  473. this.addLinkSearchParams.linkType=1
  474. }
  475. this.changeLinkType()
  476. }
  477. if(item.Type==3){
  478. let deleteId=this.selections.filter(it=> it.Id==item.Id)
  479. if(deleteId[0]){
  480. this.$refs.reportTable && this.$refs.reportTable.toggleRowSelection(deleteId[0],false)
  481. }
  482. }
  483. },
  484. editLinkNameFinish(item){
  485. if (this.editingLabel) {
  486. item.editing=false
  487. item.Name = this.editingLabel
  488. } else {
  489. this.$message.warning('不能为空');
  490. }
  491. },
  492. searchReport(){
  493. this.reportParams.CurrentIndex=1
  494. if(!this.reportKeyWord){
  495. this.reportList=[]
  496. this.reportTotal=0
  497. }else{
  498. this.getReportList()
  499. }
  500. },
  501. getReportList(){
  502. let params={
  503. CurrentIndex: this.reportParams.CurrentIndex,
  504. PageSize: this.reportParams.PageSize,
  505. KeyWord:this.reportKeyWord,
  506. State:2
  507. }
  508. reportlist(params).then((res) => {
  509. if (res.Ret === 200) {
  510. this.reportList = res.Data.List || [];
  511. this.reportTotal = parseInt(res.Data.Paging.Totals);
  512. }
  513. });
  514. },
  515. pageChange(page_no){
  516. this.reportParams.CurrentIndex = page_no;
  517. this.getReportList();
  518. },
  519. reportSelect(selection){
  520. this.selections=selection
  521. let allIds = this.reportList.map(it => {
  522. return it.Id
  523. })
  524. let simpleSelections = selection.map(it => {
  525. return {Id:it.Id,Code:it.ReportCode,Name:it.Title}
  526. })
  527. let unselectIds=[]
  528. if(simpleSelections.length>0){
  529. allIds.map(id =>{
  530. if(simpleSelections.every(sele => id!=sele.Id )){
  531. unselectIds.push(id)
  532. }
  533. })
  534. }else{
  535. unselectIds=allIds
  536. }
  537. //没有就增加
  538. simpleSelections.map(item =>{
  539. let rId = this.addLinkSearchParams.linkType+'-'+item.Id
  540. if(this.checkedLinkList.every(sele => rId!=sele.RId )){
  541. this.checkedLinkList.push({
  542. RId:rId,
  543. Id:item.Id,
  544. Name:item.Name,
  545. Type:this.addLinkSearchParams.linkType,
  546. editing:false,
  547. detailParams:{id:item.Id,code:item.Code}
  548. })
  549. }
  550. })
  551. //有就去掉
  552. unselectIds.map(item =>{
  553. let rId = this.addLinkSearchParams.linkType+'-'+item
  554. let index = this.checkedLinkList.findIndex(link => rId==link.RId)
  555. if(index!=-1){
  556. this.checkedLinkList.splice(index,1)
  557. }
  558. })
  559. },
  560. saveLink(){
  561. this.$emit("saveLink", this.checkedLinkList);
  562. },
  563. cancelHandle(){
  564. this.$emit("update:show", false);
  565. }
  566. },
  567. }
  568. </script>
  569. <style lang="scss" scoped>
  570. .add-link-box{
  571. padding: 15px 40px 35px;
  572. .link-box-option{
  573. display: flex;
  574. align-items: center;
  575. justify-content: space-between;
  576. margin-bottom: 30px;
  577. }
  578. .link-box-content{
  579. margin-bottom: 30px;
  580. .link-content-dataIndex{
  581. display: flex;
  582. flex-direction: column;
  583. .value-ul {
  584. flex-grow: 1;
  585. overflow-y: auto;
  586. margin-top: 10px;
  587. height: 200px;
  588. border-bottom: 1px solid #EBEFF6;
  589. .value-item {
  590. /* width: 100%; */
  591. padding: 10px 0;
  592. border: 1px solid #dcdfe6;
  593. border-bottom: none;
  594. display: flex;
  595. justify-content: space-around;
  596. >span{
  597. padding:0 16px;
  598. box-sizing: border-box;
  599. }
  600. .value-label {
  601. position: relative;
  602. color: #666;
  603. .value-style{
  604. padding:5px;
  605. border-radius: 4px;
  606. &.predict-act {
  607. color: orange;
  608. }
  609. }
  610. &.date{
  611. &::after{
  612. content: '';
  613. position:absolute;
  614. right:0;
  615. top:-14px;
  616. height:calc(100% + 28px);
  617. width:1px;
  618. background-color: #dcdfe6;
  619. }
  620. }
  621. }
  622. .predict-act {
  623. color: orange;
  624. }
  625. .new-tag {
  626. width: 6px;
  627. height: 6px;
  628. display: inline-block;
  629. position: absolute;
  630. left: -12px;
  631. top: 50%;
  632. transform: translateY(-50%);
  633. border-radius: 50%;
  634. background: #f00;
  635. }
  636. }
  637. .nodata {
  638. text-align: center;
  639. padding: 40px 0;
  640. color: #999;
  641. }
  642. }
  643. .delete-button{
  644. color: #AD352F;
  645. font-size: 14px;
  646. cursor: pointer;
  647. }
  648. }
  649. .link-content-chartIndex{
  650. .chart-name{
  651. font-size: 16px;
  652. text-align: center;
  653. color: #333333;
  654. }
  655. }
  656. }
  657. .link-box-tags{
  658. display: flex;
  659. align-items: center;
  660. overflow-x: auto;
  661. .link-box-tag{
  662. display: flex;
  663. align-items: center;
  664. padding: 0 8px;
  665. height: 30px;
  666. max-width: 250px;
  667. background-color: #F8F8F8;
  668. margin-right: 30px;
  669. cursor: pointer;
  670. &:last-child{
  671. margin-right: 0;
  672. }
  673. span{
  674. color: #666666;
  675. white-space: nowrap;
  676. overflow: hidden;
  677. text-overflow: ellipsis;
  678. }
  679. img{
  680. height: 16px;
  681. width: 16px;
  682. margin-left: 8px;
  683. }
  684. }
  685. }
  686. .link-box-buttons{
  687. margin-top: 60px;
  688. display: flex;
  689. align-items: center;
  690. justify-content: center;
  691. }
  692. }
  693. </style>