addRightEdbDialog.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  1. <template>
  2. <!-- 添加右轴指标 -->
  3. <el-dialog
  4. :visible.sync="isShow"
  5. :close-on-click-modal="false"
  6. :append-to-body="true"
  7. @close="$emit('close')"
  8. custom-class="average-edit-dialog"
  9. center
  10. width="650px"
  11. v-dialogDrag
  12. top="8vh"
  13. :title="$t('EtaChartAddPage.add_right_edb_btn')"
  14. >
  15. <div class="container">
  16. <div class="type-select">
  17. <el-radio-group v-model="rightEdbForm.IndicatorType">
  18. <el-radio :label="1"><!-- 左轴指标同比 -->{{ $t('EtaChartAddPage.right_edb_type_on_year') }}</el-radio>
  19. <el-radio :label="2"><!-- 指标库 -->{{ $t('EtaChartAddPage.right_edb_type_lib') }}</el-radio>
  20. <el-radio :label="3"><!-- 预测指标 -->{{ $t('EtaChartAddPage.right_edb_type_pred') }}</el-radio>
  21. </el-radio-group>
  22. <el-select v-if="rightEdbForm.IndicatorType!==1"
  23. v-model="search_txt"
  24. v-loadMore="searchLoad"
  25. ref="searchRef"
  26. :filterable="!search_txt"
  27. remote
  28. clearable
  29. :placeholder="$t('Edb.InputHolderAll.input_name_orid')"
  30. style="width:90%;margin-top: 20px;display: block;"
  31. :remote-method="searchHandle"
  32. @click.native="inputFocusHandle"
  33. @change="selectTarget($event && searchOptions.find(_ => _.EdbInfoId === $event))"
  34. >
  35. <i slot="prefix" class="el-input__icon el-icon-search"></i>
  36. <el-option
  37. v-for="item in searchOptions"
  38. :key="item.EdbInfoId"
  39. :label="chart_lang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName"
  40. :value="item.EdbInfoId"
  41. :disabled="!item.HaveOperaAuth"
  42. >
  43. <edbDetailPopover :info="item">
  44. <div slot="reference">
  45. <img
  46. :src="$icons.lock_ico2"
  47. width="18"
  48. height="18"
  49. style="vertical-align:middle"
  50. v-if="!item.HaveOperaAuth"
  51. />
  52. {{chart_lang==='en'?(item.EdbNameEn||item.EdbName):item.EdbName }}
  53. </div>
  54. </edbDetailPopover>
  55. </el-option>
  56. </el-select>
  57. </div>
  58. <div class="form-box">
  59. <el-form :model="rightEdbForm" :rules="formRules" hide-required-asterisk
  60. label-position="right"
  61. label-width="120px">
  62. <!-- 生成样式-->
  63. <el-form-item :label="$t('EtaChartAddPage.right_edb_gen_style')">
  64. <el-select v-model="rightEdbForm.Style">
  65. <el-option :label="$t('EtaChartAddPage.right_edb_gen_column')" value="column"></el-option>
  66. <el-option :label="$t('EtaChartAddPage.right_edb_gen_mark')" value="mark"></el-option>
  67. </el-select>
  68. </el-form-item>
  69. <!-- 如果选择标记点 -->
  70. <el-form-item :label="$t('EtaChartAddPage.right_edb_mark_shape')" v-if="rightEdbForm.Style==='mark'">
  71. <el-select v-model="rightEdbForm.Shape">
  72. <el-option
  73. v-for="markItem in markTypesOpts"
  74. :key="markItem.value"
  75. :label="markItem.label"
  76. :value="markItem.value"
  77. >
  78. <div style="display: flex;align-items: center;justify-content: center;height: 100%;" v-html="markItem.svg">
  79. </div>
  80. </el-option>
  81. </el-select>
  82. </el-form-item>
  83. <!-- 柱形/标记点的 颜色及透明度 -->
  84. <el-form-item :label="$t('EtaChartAddPage.right_edb_color_set')">
  85. <el-color-picker
  86. style="width: 90px"
  87. v-model="rightEdbForm.ChartColor"
  88. show-alpha
  89. :predefine="predefineColors"
  90. ></el-color-picker>
  91. </el-form-item>
  92. <!-- 如果选择标记点 -->
  93. <el-form-item :label="$t('EtaChartAddPage.right_edb_mark_size')" v-if="rightEdbForm.Style==='mark'">
  94. <el-input-number
  95. v-model="rightEdbForm.Size"
  96. controls-position="right"
  97. :min="1"
  98. style="width: 90px"/>
  99. </el-form-item>
  100. <el-form-item :label="$t('EtaChartAddPage.right_edb_legend')">
  101. <el-input v-model="rightEdbForm.Legend"></el-input>
  102. </el-form-item>
  103. <!-- 如果选择左轴同比 -->
  104. <el-form-item :label="$t('EtaChartAddPage.right_edb_format')" v-if="rightEdbForm.IndicatorType===1">
  105. <el-radio-group v-model="rightEdbForm.NumFormat">
  106. <el-radio :label="1"><!-- 百分数 -->{{ $t('EtaChartAddPage.right_edb_format_per') }}</el-radio>
  107. <el-radio :label="2"><!-- 小数 -->{{ $t('EtaChartAddPage.right_edb_format_dec') }}</el-radio>
  108. </el-radio-group>
  109. </el-form-item>
  110. <!-- 如果选择标记点 -->
  111. <el-form-item label="标记点连线" v-if="rightEdbForm.Style==='mark'">
  112. <el-radio-group v-model="rightEdbForm.IsConnected">
  113. <el-radio :label="0">无</el-radio>
  114. <el-radio :label="1">有</el-radio>
  115. </el-radio-group>
  116. </el-form-item>
  117. <!-- 如果选择连线 -->
  118. <template v-if="rightEdbForm.IsConnected">
  119. <el-form-item label="连线颜色">
  120. <el-color-picker
  121. style="width: 90px"
  122. v-model="rightEdbForm.LineColor"
  123. show-alpha
  124. :predefine="predefineColors"
  125. ></el-color-picker>
  126. </el-form-item>
  127. <el-form-item label="连线线型">
  128. <el-select v-model="rightEdbForm.LineStyle">
  129. <el-option v-for="lineItem in lineStylesOpts"
  130. :key="lineItem.value"
  131. :label="lineItem.label"
  132. :value="lineItem.value"
  133. >
  134. <svg width="60" height="10" viewBox="0 0 60 10" fill="none" xmlns="http://www.w3.org/2000/svg" v-html="lineItem.svg">
  135. </svg>
  136. </el-option>
  137. </el-select>
  138. </el-form-item>
  139. <el-form-item label="连线粗细">
  140. <el-input-number
  141. v-model="rightEdbForm.LineWidth"
  142. controls-position="right"
  143. :min="1"
  144. style="width: 90px"/>
  145. </el-form-item>
  146. </template>
  147. </el-form>
  148. </div>
  149. </div>
  150. <div slot="footer" class="dialog-footer" style="text-align: center;">
  151. <el-button @click="$emit('close')">取消</el-button>
  152. <el-button type="primary" @click="confirmPerson">保存</el-button>
  153. </div>
  154. </el-dialog>
  155. </template>
  156. <script>
  157. import { dataBaseInterface } from '@/api/api.js';
  158. import * as preDictEdbInterface from '@/api/modules/predictEdbApi.js';
  159. import { defaultOpts } from '@/utils/defaultOptions';
  160. import { markTypesOpts,lineStylesOpts } from '@/views/system_manage/chartTheme/common/config'
  161. export default {
  162. props:{
  163. isShow:{
  164. type:Boolean,
  165. default:false
  166. },
  167. tableData:{
  168. type:Array
  169. },
  170. formData:{
  171. type:Object,
  172. default:{}
  173. },
  174. edbData:{
  175. type:Object,
  176. default:{}
  177. }
  178. },
  179. computed:{
  180. formRules(){ //方便英文翻译
  181. return {}
  182. }
  183. },
  184. watch:{
  185. isShow(newval){
  186. if(newval){
  187. Object.assign(this.rightEdbForm,this.formData)
  188. this.rightEdbData = this.edbData
  189. }
  190. }
  191. },
  192. data() {
  193. return {
  194. search_page:1,
  195. current_search:'',
  196. search_txt:'',
  197. search_have_more:false,
  198. searchOptions:[],
  199. rightEdbForm:{
  200. IndicatorType:1,//1左轴同比 2指标库 3预测指标
  201. Style:'column',//生成样式 column/mark
  202. Shape:'circle',//标记点形状
  203. ChartColor:'#075EEE',//颜色
  204. Size:3,//标记点大小
  205. Legend:'',//图例名称
  206. NumFormat:1,//数值格式 1百分比 2小数
  207. IsConnected:0,//连线 0无 1有
  208. LineColor:'#075EEE',//线条颜色
  209. LineWidth:3,//线条粗细
  210. LineStyle:'Solid',//线条线型
  211. },
  212. rightEdbData:{},
  213. markTypesOpts,lineStylesOpts,
  214. predefineColors: defaultOpts.colors.slice(0, 2),
  215. };
  216. },
  217. methods: {
  218. /* 搜索 */
  219. searchHandle(query) {
  220. this.search_page = 1;
  221. this.current_search = query;
  222. this.searchApi(this.current_search)
  223. },
  224. async searchApi(query,page=1) {
  225. let params = {
  226. KeyWord:query,
  227. CurrentIndex: page,
  228. }
  229. const res = this.rightEdbForm.IndicatorType === 2
  230. ? await dataBaseInterface.targetSearchByPage(params)
  231. : await preDictEdbInterface.edbSearch(params)
  232. if(res.Ret !== 200) return
  233. const { List,Paging } = res.Data;
  234. this.search_have_more = page < Paging.Pages;
  235. this.searchOptions = page === 1 ? List : this.searchOptions.concat(List);
  236. },
  237. /* 聚焦获取当前检索 */
  238. inputFocusHandle(e) {
  239. this.search_page = 1;
  240. this.current_search = e.target.value;
  241. this.searchApi(this.current_search);
  242. },
  243. searchLoad() {
  244. if(!this.search_have_more) return;
  245. this.searchApi(this.current_search,++this.search_page);
  246. },
  247. //选择指标,获取详情,保存基本信息
  248. async selectTarget(item){
  249. if(!item) return
  250. //检查添加指标是否已存在
  251. let have_bol = this.tableData.every(i => i.EdbInfoId === item.EdbInfoId);
  252. if(have_bol){
  253. // this.$message.warning('录入指标已存在');
  254. this.search_txt = ''
  255. return this.$message.warning(this.$t('Chart.OptMsg.edb_haved_msg'));
  256. }
  257. //以曲线图的参数获取指标详情
  258. let params = {
  259. EdbInfoId: item.EdbInfoId,
  260. ChartType: 1,
  261. Calendar: undefined,
  262. DateType: 3,
  263. StartYear:0,
  264. StartDate: '',
  265. EndDate: '',
  266. }
  267. const res = await dataBaseInterface.chartInfo(params)
  268. if(res.Ret!==200) return
  269. const tableItem = res.Data.EdbInfoList[0]
  270. this.rightEdbData = {
  271. EdbInfoId: tableItem.EdbInfoId,
  272. EdbInfoType:tableItem.EdbInfoType,
  273. LeadValue:tableItem.LeadValue,
  274. LeadUnit:tableItem.LeadUnit,
  275. IsAxis:0,
  276. }
  277. },
  278. confirmPerson(){
  279. //校验
  280. if(this.rightEdbForm.IndicatorType!==1&&!this.search_txt){
  281. return this.$message.warning('请选择指标!')
  282. }
  283. this.$emit('modify',{form:this.rightEdbForm,data:this.rightEdbData})
  284. }
  285. },
  286. };
  287. </script>
  288. <style scoped lang="scss">
  289. .average-edit-dialog{
  290. .type-select{
  291. padding-bottom: 30px;
  292. border-bottom: 1px solid #C8CDD9;
  293. }
  294. .form-box{
  295. margin-top: 30px;
  296. }
  297. }
  298. </style>