ProductCostForm.vue 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743
  1. <template>
  2. <div class="flex j-s " style="position: relative;">
  3. <div class="sidebarShortcut">
  4. <ul class="flex j-c a-c f-c">
  5. <li v-if="underwritingRulesForm" :class="{ sidebarstyle: sidebarItem == 'gzxx' }" class="flex a-c "
  6. @click="scrollToSection('gzxx')">
  7. <div :style="{ opacity: sidebarItem == 'gzxx' ? 1 : 0 }" class="ornament flex a-c j-c"></div>规则信息
  8. </li>
  9. <li :class="{ sidebarstyle: sidebarItem == 'clxx' }" class="flex a-c " @click="scrollToSection('clxx')">
  10. <div :style="{ opacity: sidebarItem == 'clxx' ? 1 : 0 }" class="ornament flex a-c j-c"></div>车辆信息
  11. </li>
  12. <li :class="{ sidebarstyle: sidebarItem == 'czxx' }" class="flex a-c " @click="scrollToSection('czxx')">
  13. <div :style="{ opacity: sidebarItem == 'czxx' ? 1 : 0 }" class="ornament flex a-c j-c"></div>车主信息
  14. </li>
  15. <li :class="{ sidebarstyle: sidebarItem == 'tbrxx' }" class="flex a-c " @click="scrollToSection('tbrxx')">
  16. <div :style="{ opacity: sidebarItem == 'tbrxx' ? 1 : 0 }" class="ornament flex a-c j-c"></div>投保人信息
  17. </li>
  18. <li :class="{ sidebarstyle: sidebarItem == 'bbrxx' }" class="flex a-c " @click="scrollToSection('bbrxx')">
  19. <div :style="{ opacity: sidebarItem == 'bbrxx' ? 1 : 0 }" class="ornament flex a-c j-c"></div>被保人信息
  20. </li>
  21. <li v-if="insuranceTypeAttr.length > 0" :class="{ sidebarstyle: sidebarItem == 'xbxx' }" class="flex a-c "
  22. @click="scrollToSection('xbxx')">
  23. <div :style="{ opacity: sidebarItem == 'xbxx' ? 1 : 0 }" class="ornament flex a-c j-c"></div>险别信息
  24. </li>
  25. <li v-if="insurerCostFactorAttr.length > 0" :class="{ sidebarstyle: sidebarItem == 'bsfyyz' }" class="flex a-c "
  26. @click="scrollToSection('bsfyyz')">
  27. <div :style="{ opacity: sidebarItem == 'bsfyyz' ? 1 : 0 }" class="ornament flex a-c j-c"></div>保司费用因子
  28. </li>
  29. </ul>
  30. </div>
  31. <div class="tab-panecent1">
  32. <el-form ref="productCostForm" :model="localForm" label-width="120px" :size="overSize" :disabled="disabled">
  33. <el-card shadow="hover" class="margin-bom" id="gzxx" v-if="underwritingRulesForm">
  34. <div slot="header" class="clearfix flex j-s a-c">
  35. <div class="flex j-s a-c">
  36. <span>规则信息</span>
  37. </div>
  38. </div>
  39. <div class="p-2" v-show="CarCollapsed">
  40. <el-form ref="form" :model="underwritingRulesForm" label-width="80px" size="small">
  41. <el-col :span="8">
  42. <el-form-item label="是否有效">
  43. <el-select v-model="underwritingRulesForm.validInd" placeholder="请选择活动区域">
  44. <el-option label="有效" value="1"></el-option>
  45. <el-option label="无效" value="0"></el-option>
  46. <el-option label="待审核" value="2"></el-option>
  47. </el-select>
  48. </el-form-item>
  49. </el-col>
  50. <el-col :span="8">
  51. <el-form-item label="规则起期">
  52. <el-date-picker value-format="yyyy-MM-dd" v-model="underwritingRulesForm.rulesStartDate" type="date"
  53. placeholder="选择日期">
  54. </el-date-picker>
  55. </el-form-item>
  56. </el-col>
  57. <el-col :span="8">
  58. <el-form-item label="规则止期">
  59. <el-date-picker value-format="yyyy-MM-dd" v-model="underwritingRulesForm.rulesEndDate" type="date"
  60. @change="rulesEndDateChange" placeholder="选择日期">
  61. </el-date-picker>
  62. </el-form-item>
  63. </el-col>
  64. <el-col :span="24">
  65. <el-form-item label="规则描述">
  66. <el-input type="textarea" v-model="underwritingRulesForm.ruleDescription" placeholder="请输入承保规则描述"
  67. maxlength="100" show-word-limit></el-input>
  68. </el-form-item>
  69. </el-col>
  70. </el-form>
  71. </div>
  72. </el-card>
  73. <el-card shadow="hover" class="margin-bom" id="clxx">
  74. <div slot="header" class="clearfix flex j-s a-c">
  75. <div class="flex j-s a-c">
  76. <span>车辆信息</span>
  77. </div>
  78. <!-- <el-button @click="toggle('Car')" style="float: right; padding: 3px 0; color: #ff9000;" type="text">{{
  79. CarCollapsed
  80. ? '收起' : '展开'
  81. }}</el-button> -->
  82. </div>
  83. <div class="p-2" v-show="CarCollapsed">
  84. <el-col v-for=" (formItems, index) in CarAttr" :key="index"
  85. :span="formItems.attrType == 'checkbox' ? 24 : 11">
  86. <el-form-item :label="formItems.attrName">
  87. <template v-if="formItems.attrType == 'inputNumber'">
  88. <template v-if="formItems.operator == '1' || formItems.operator == null">
  89. <el-input-number v-model="formItems.min"></el-input-number>
  90. <i class="el-icon-minus"></i>
  91. <el-input-number v-model="formItems.max"></el-input-number>
  92. </template>
  93. <template v-if="formItems.operator == '2'">
  94. <span><</span>
  95. <el-input-number v-model="formItems.min"></el-input-number>
  96. </template>
  97. <template v-if="formItems.operator == '3'">
  98. <span>≤</span>
  99. <el-input-number v-model="formItems.min"></el-input-number>
  100. </template>
  101. <template v-if="formItems.operator == '4'">
  102. <span>></span>
  103. <el-input-number v-model="formItems.max"></el-input-number>
  104. </template>
  105. <template v-if="formItems.operator == '5'">
  106. <span>≥</span>
  107. <el-input-number v-model="formItems.max"></el-input-number>
  108. </template>
  109. <el-select v-model="formItems.operator" @change="selectoperatorChange($event, formItems.id)"
  110. placeholder="请选择" style="width: 120px;margin-left: 20px;">
  111. <el-option v-for="operatoritem in operator" :key="operatoritem.id" :label="operatoritem.label"
  112. :value="operatoritem.value"></el-option>
  113. </el-select>
  114. </template>
  115. <div v-if="formItems.attrType == 'select'" style="display: flex;">
  116. <el-select multiple v-model="formItems.minArray" placeholder="请选择" style="width: 100%;"
  117. @change="selectChange($event, formItems.id, 'min')">
  118. <el-option v-for="dict in formItems.dictLabal" :key="dict.code" :label="dict.name"
  119. :value="formItems.attrName == '车辆类型' ? dict.code : dict.name"></el-option>
  120. </el-select>
  121. <el-checkbox style="margin-left: 10px;" v-if="formItems.attrCode == 'LicenseNo'"
  122. v-model="LicenseNoChecked"
  123. @change="LicenseNoCheckedChange($event, 'LicenseNo', 'min')">全选</el-checkbox>
  124. <el-checkbox style="margin-left: 10px;" v-if="formItems.attrCode == 'LicenseArea'"
  125. v-model="LicenseNoChecked1"
  126. @change="LicenseNoCheckedChange($event, 'LicenseArea', 'min')">全选</el-checkbox>
  127. </div>
  128. <div v-if="formItems.attrType == 'input'" style="display: flex;">
  129. <el-input v-model="formItems.min" placeholder="输入(宝马、奥迪等)多个输入,用,隔开"></el-input>
  130. <el-select v-model="formItems.operator" placeholder="请选择" style="width: 120px;margin-left: 20px;">
  131. <el-option label="包含" value="1"></el-option>
  132. <el-option label="不包含" value="2"></el-option>
  133. </el-select>
  134. </div>
  135. <el-checkbox-group v-if="formItems.attrType == 'checkbox'" v-model="formItems.minArray"
  136. @change="checkboxChange($event, formItems.id, 'min')">
  137. <el-checkbox v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.name"></el-checkbox>
  138. </el-checkbox-group>
  139. <div class="flex " v-if="formItems.attrType == 'radio'">
  140. <el-radio-group v-model="formItems.min">
  141. <el-radio-button v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.code">{{ dict.name
  142. }}</el-radio-button>
  143. </el-radio-group>
  144. <el-button v-if="formItems.attrType == 'radio'" size="mini" style="margin-left: 20px;"
  145. @click="radiouncheck(formItems)">取消选择</el-button>
  146. </div>
  147. </el-form-item>
  148. </el-col>
  149. </div>
  150. </el-card>
  151. <el-card shadow="hover" class="margin-bom" id="czxx">
  152. <div slot="header" class="clearfix flex j-s a-c">
  153. <div class="flex j-s a-c">
  154. <span>车主信息</span>
  155. </div>
  156. <!-- <el-button @click="toggle('Carowners')" style="float: right; padding: 3px 0; color: #ff9000;" type="text">{{
  157. CarownersCollapsed
  158. ? '收起' : '展开'
  159. }}</el-button> -->
  160. </div>
  161. <div class="p-2" v-show="CarownersCollapsed">
  162. <el-col v-for=" (formItems, index) in CarownersAttr" :key="index"
  163. :span="formItems.attrType == 'checkbox' ? 24 : 12">
  164. <el-form-item :label="formItems.attrName">
  165. <template v-if="formItems.attrType == 'inputNumber'">
  166. <template v-if="formItems.operator == '1' || formItems.operator == null">
  167. <el-input-number v-model="formItems.min"></el-input-number>
  168. <i class="el-icon-minus"></i>
  169. <el-input-number v-model="formItems.max"></el-input-number>
  170. </template>
  171. <template v-if="formItems.operator == '2'">
  172. <span><</span>
  173. <el-input-number v-model="formItems.min"></el-input-number>
  174. </template>
  175. <template v-if="formItems.operator == '3'">
  176. <span>≤</span>
  177. <el-input-number v-model="formItems.min"></el-input-number>
  178. </template>
  179. <template v-if="formItems.operator == '4'">
  180. <span>></span>
  181. <el-input-number v-model="formItems.max"></el-input-number>
  182. </template>
  183. <template v-if="formItems.operator == '5'">
  184. <span>≥</span>
  185. <el-input-number v-model="formItems.max"></el-input-number>
  186. </template>
  187. <el-select v-model="formItems.operator" @change="selectoperatorChange($event, formItems.id)"
  188. placeholder="请选择" style="width: 120px;margin-left: 20px;">
  189. <el-option v-for="operatoritem in operator" :key="operatoritem.id" :label="operatoritem.label"
  190. :value="operatoritem.value"></el-option>
  191. </el-select>
  192. </template>
  193. <el-select v-if="formItems.attrType == 'select'" multiple v-model="formItems.list" placeholder="请选择"
  194. style="width: 100%;" @change="selectChange($event, formItems.id, 'min')">
  195. <el-option v-for="dict in formItems.dictLabal" :key="dict.code" :label="dict.name"
  196. :value="dict.name"></el-option>
  197. </el-select>
  198. <el-input v-if="formItems.attrType == 'input'" v-model="formItems.min" placeholder="身份证前2位或前6位
  199. "></el-input>
  200. <el-checkbox-group v-if="formItems.attrType == 'checkbox'" v-model="formItems.list"
  201. @change="checkboxChange($event, formItems.id, 'min')">
  202. <el-checkbox v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.name"></el-checkbox>
  203. </el-checkbox-group>
  204. <div class="flex " v-if="formItems.attrType == 'radio'">
  205. <el-radio-group v-model="formItems.min">
  206. <el-radio-button v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.code">{{ dict.name
  207. }}</el-radio-button>
  208. </el-radio-group>
  209. <el-button v-if="formItems.attrType == 'radio'" size="mini" style="margin-left: 20px;"
  210. @click="radiouncheck(formItems)">取消选择</el-button>
  211. </div>
  212. </el-form-item>
  213. </el-col>
  214. </div>
  215. </el-card>
  216. <el-card shadow="hover" class="margin-bom" id="tbrxx">
  217. <div slot="header" class="clearfix flex j-s a-c">
  218. <div class="flex j-s a-c">
  219. <span>投保人信息</span>
  220. </div>
  221. <!-- <el-button @click="toggle('Applicant')" style="float: right; padding: 3px 0; color: #ff9000;" type="text">{{
  222. ApplicantCollapsed
  223. ? '收起' : '展开'
  224. }}</el-button> -->
  225. </div>
  226. <div class="p-2" v-show="ApplicantCollapsed">
  227. <el-col v-for=" (formItems, index) in ApplicantAttr" :key="index"
  228. :span="formItems.attrType == 'checkbox' ? 24 : 12">
  229. <el-form-item :label="formItems.attrName">
  230. <template v-if="formItems.attrType == 'inputNumber'">
  231. <template v-if="formItems.operator == '1' || formItems.operator == null">
  232. <el-input-number v-model="formItems.min"></el-input-number>
  233. <i class="el-icon-minus"></i>
  234. <el-input-number v-model="formItems.max"></el-input-number>
  235. </template>
  236. <template v-if="formItems.operator == '2'">
  237. <span><</span>
  238. <el-input-number v-model="formItems.min"></el-input-number>
  239. </template>
  240. <template v-if="formItems.operator == '3'">
  241. <span>≤</span>
  242. <el-input-number v-model="formItems.min"></el-input-number>
  243. </template>
  244. <template v-if="formItems.operator == '4'">
  245. <span>></span>
  246. <el-input-number v-model="formItems.max"></el-input-number>
  247. </template>
  248. <template v-if="formItems.operator == '5'">
  249. <span>≥</span>
  250. <el-input-number v-model="formItems.max"></el-input-number>
  251. </template>
  252. <el-select v-model="formItems.operator" placeholder="请选择"
  253. @change="selectoperatorChange($event, formItems.id)" style="width: 120px;margin-left: 20px;">
  254. <el-option v-for="operatoritem in operator" :key="operatoritem.id" :label="operatoritem.label"
  255. :value="operatoritem.value"></el-option>
  256. </el-select>
  257. </template>
  258. <el-select v-if="formItems.attrType == 'select'" multiple v-model="formItems.list" placeholder="请选择"
  259. style="width: 100%;" @change="selectChange($event, formItems.id, 'min')">
  260. <el-option v-for="dict in formItems.dictLabal" :key="dict.code" :label="dict.name"
  261. :value="dict.name"></el-option>
  262. </el-select>
  263. <el-input v-if="formItems.attrType == 'input'" v-model="formItems.min" placeholder="身份证前2位或前6位
  264. "></el-input>
  265. <el-checkbox-group v-if="formItems.attrType == 'checkbox'" v-model="formItems.list"
  266. @change="checkboxChange($event, formItems.id, 'min')">
  267. <el-checkbox v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.name"></el-checkbox>
  268. </el-checkbox-group>
  269. <div class="flex " v-if="formItems.attrType == 'radio'">
  270. <el-radio-group v-model="formItems.min">
  271. <el-radio-button v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.code">{{ dict.name
  272. }}</el-radio-button>
  273. </el-radio-group>
  274. <el-button v-if="formItems.attrType == 'radio'" size="mini" style="margin-left: 20px;"
  275. @click="radiouncheck(formItems)">取消选择</el-button>
  276. </div>
  277. </el-form-item>
  278. </el-col>
  279. </div>
  280. </el-card>
  281. <el-card shadow="hover" class="margin-bom" id="bbrxx">
  282. <div slot="header" class="clearfix flex j-s a-c">
  283. <div class="flex j-s a-c">
  284. <span>被保人信息</span>
  285. </div>
  286. <!-- <el-button @click="toggle('Insured')" style="float: right; padding: 3px 0; color: #ff9000;" type="text">{{
  287. InsuredCollapsed
  288. ? '收起' : '展开'
  289. }}</el-button> -->
  290. </div>
  291. <div class="p-2" v-show="InsuredCollapsed">
  292. <el-col v-for=" (formItems, index) in InsuredAttr" :key="index"
  293. :span="formItems.attrType == 'checkbox' ? 24 : 12">
  294. <el-form-item :label="formItems.attrName">
  295. <template v-if="formItems.attrType == 'inputNumber'">
  296. <template v-if="formItems.operator == '1' || formItems.operator == null">
  297. <el-input-number v-model="formItems.min"></el-input-number>
  298. <i class="el-icon-minus"></i>
  299. <el-input-number v-model="formItems.max"></el-input-number>
  300. </template>
  301. <template v-if="formItems.operator == '2'">
  302. <span><</span>
  303. <el-input-number v-model="formItems.min"></el-input-number>
  304. </template>
  305. <template v-if="formItems.operator == '3'">
  306. <span>≤</span>
  307. <el-input-number v-model="formItems.min"></el-input-number>
  308. </template>
  309. <template v-if="formItems.operator == '4'">
  310. <span>></span>
  311. <el-input-number v-model="formItems.max"></el-input-number>
  312. </template>
  313. <template v-if="formItems.operator == '5'">
  314. <span>≥</span>
  315. <el-input-number v-model="formItems.max"></el-input-number>
  316. </template>
  317. <el-select v-model="formItems.operator" @change="selectoperatorChange($event, formItems.id)"
  318. placeholder="请选择" style="width: 120px;margin-left: 20px;">
  319. <el-option v-for="operatoritem in operator" :key="operatoritem.id" :label="operatoritem.label"
  320. :value="operatoritem.value"></el-option>
  321. </el-select>
  322. </template>
  323. <el-select v-if="formItems.attrType == 'select'" multiple v-model="formItems.list" placeholder="请选择"
  324. style="width: 100%;" @change="selectChange($event, formItems.id, 'min')">
  325. <el-option v-for="dict in formItems.dictLabal" :key="dict.code" :label="dict.name"
  326. :value="dict.name"></el-option>
  327. </el-select>
  328. <el-input v-if="formItems.attrType == 'input'" v-model="formItems.min" placeholder="身份证前2位或前6位
  329. "></el-input>
  330. <el-checkbox-group v-if="formItems.attrType == 'checkbox'" v-model="formItems.list"
  331. @change="checkboxChange($event, formItems.id, 'min')">
  332. <el-checkbox v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.name"></el-checkbox>
  333. </el-checkbox-group>
  334. <div class="flex " v-if="formItems.attrType == 'radio'">
  335. <el-radio-group v-model="formItems.min">
  336. <el-radio-button v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.code">{{ dict.name
  337. }}</el-radio-button>
  338. </el-radio-group>
  339. <el-button v-if="formItems.attrType == 'radio'" size="mini" style="margin-left: 20px;"
  340. @click="radiouncheck(formItems)">取消选择</el-button>
  341. </div>
  342. </el-form-item>
  343. </el-col>
  344. </div>
  345. </el-card>
  346. <el-card shadow="hover" class="margin-bom" id="xbxx" v-if="insuranceTypeAttr.length > 0">
  347. <div slot="header" class="clearfix flex j-s a-c">
  348. <div class="flex j-s a-c">
  349. <span>险别信息</span>
  350. </div>
  351. <!-- <el-button @click="toggle('insuranceType')" style="float: right; padding: 3px 0; color: #ff9000;"
  352. type="text">{{
  353. insuranceTypeCollapsed
  354. ? '收起' : '展开'
  355. }}</el-button> -->
  356. </div>
  357. <div class="p-2" v-show="insuranceTypeCollapsed">
  358. <el-col v-for=" (formItems, index) in insuranceTypeAttr" :key="index"
  359. :span="formItems.attrType == 'checkbox' ? 24 : 12">
  360. <el-form-item :label="formItems.attrName">
  361. <template v-if="formItems.attrType == 'inputNumber'">
  362. <template v-if="formItems.operator == '1' || formItems.operator == null">
  363. <el-input-number v-model="formItems.min"></el-input-number>
  364. <i class="el-icon-minus"></i>
  365. <el-input-number v-model="formItems.max"></el-input-number>
  366. </template>
  367. <template v-if="formItems.operator == '2'">
  368. <span><</span>
  369. <el-input-number v-model="formItems.min"></el-input-number>
  370. </template>
  371. <template v-if="formItems.operator == '3'">
  372. <span>≤</span>
  373. <el-input-number v-model="formItems.min"></el-input-number>
  374. </template>
  375. <template v-if="formItems.operator == '4'">
  376. <span>></span>
  377. <el-input-number v-model="formItems.max"></el-input-number>
  378. </template>
  379. <template v-if="formItems.operator == '5'">
  380. <span>≥</span>
  381. <el-input-number v-model="formItems.max"></el-input-number>
  382. </template>
  383. <el-select v-model="formItems.operator" @change="selectoperatorChange($event, formItems.id)"
  384. placeholder="请选择" style="width: 120px;margin-left: 20px;">
  385. <el-option v-for="operatoritem in operator" :key="operatoritem.id" :label="operatoritem.label"
  386. :value="operatoritem.value"></el-option>
  387. </el-select>
  388. </template>
  389. <el-select v-if="formItems.attrType == 'select'" multiple v-model="formItems.list" placeholder="请选择"
  390. style="width: 100%;" @change="selectChange($event, formItems.id, 'min')">
  391. <el-option v-for="dict in formItems.dictLabal" :key="dict.code" :label="dict.name"
  392. :value="dict.name"></el-option>
  393. </el-select>
  394. <el-input v-if="formItems.attrType == 'input'" v-model="formItems.min"></el-input>
  395. <el-checkbox-group v-if="formItems.attrType == 'checkbox'" v-model="formItems.list"
  396. @change="checkboxChange($event, formItems.id, 'min')">
  397. <el-checkbox v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.name"></el-checkbox>
  398. </el-checkbox-group>
  399. <div class="flex " v-if="formItems.attrType == 'radio'">
  400. <el-radio-group v-model="formItems.min">
  401. <el-radio-button v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.code">{{ dict.name
  402. }}</el-radio-button>
  403. </el-radio-group>
  404. <el-button v-if="formItems.attrType == 'radio'" size="mini" style="margin-left: 20px;"
  405. @click="radiouncheck(formItems)">取消选择</el-button>
  406. </div>
  407. </el-form-item>
  408. </el-col>
  409. </div>
  410. </el-card>
  411. <el-card shadow="hover" class="margin-bom" id="bsfyyz" v-if="insurerCostFactorAttr.length > 0">
  412. <div slot="header" class="clearfix flex j-s a-c">
  413. <div class="flex j-s a-c">
  414. <span>保司费用因子</span>
  415. </div>
  416. <!-- <el-button @click="toggle('insurerCostFactor')" style="float: right; padding: 3px 0; color: #ff9000;"
  417. type="text">{{
  418. insurerCostFactorCollapsed
  419. ? '收起' : '展开'
  420. }}</el-button> -->
  421. </div>
  422. <div class="p-2" v-show="insurerCostFactorCollapsed">
  423. <el-col v-for=" (formItems, index) in insurerCostFactorAttr" :key="index"
  424. :span="formItems.attrType == 'checkbox' ? 24 : 12">
  425. <el-form-item :label="formItems.attrName">
  426. <template v-if="formItems.attrType == 'inputNumber'">
  427. <template v-if="formItems.operator == '1' || formItems.operator == null">
  428. <el-input-number v-model="formItems.min"></el-input-number>
  429. <i class="el-icon-minus"></i>
  430. <el-input-number v-model="formItems.max"></el-input-number>
  431. </template>
  432. <template v-if="formItems.operator == '2'">
  433. <span><</span>
  434. <el-input-number v-model="formItems.min"></el-input-number>
  435. </template>
  436. <template v-if="formItems.operator == '3'">
  437. <span>≤</span>
  438. <el-input-number v-model="formItems.min"></el-input-number>
  439. </template>
  440. <template v-if="formItems.operator == '4'">
  441. <span>></span>
  442. <el-input-number v-model="formItems.max"></el-input-number>
  443. </template>
  444. <template v-if="formItems.operator == '5'">
  445. <span>≥</span>
  446. <el-input-number v-model="formItems.max"></el-input-number>
  447. </template>
  448. <el-select v-model="formItems.operator" @change="selectoperatorChange($event, formItems.id)"
  449. placeholder="请选择" style="width: 120px;margin-left: 20px;">
  450. <el-option v-for="operatoritem in operator" :key="operatoritem.id" :label="operatoritem.label"
  451. :value="operatoritem.value"></el-option>
  452. </el-select>
  453. </template>
  454. <el-select v-if="formItems.attrType == 'select'" multiple v-model="formItems.list" placeholder="请选择"
  455. style="width: 100%;" @change="selectChange($event, formItems.id, 'min')">
  456. <el-option v-for="dict in formItems.dictLabal" :key="dict.code" :label="dict.name"
  457. :value="dict.name"></el-option>
  458. </el-select>
  459. <el-input v-if="formItems.attrType == 'input'" v-model="formItems.min"></el-input>
  460. <el-checkbox-group v-if="formItems.attrType == 'checkbox'" v-model="formItems.list"
  461. @change="checkboxChange($event, formItems.id, 'min')">
  462. <el-checkbox v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.name"></el-checkbox>
  463. </el-checkbox-group>
  464. <div class="flex " v-if="formItems.attrType == 'radio'">
  465. <el-radio-group v-model="formItems.min">
  466. <el-radio-button v-for="dict in formItems.dictLabal" :key="dict.id" :label="dict.code">{{ dict.name
  467. }}</el-radio-button>
  468. </el-radio-group>
  469. <el-button v-if="formItems.attrType == 'radio'" size="mini" style="margin-left: 20px;"
  470. @click="radiouncheck(formItems)">取消选择</el-button>
  471. </div>
  472. </el-form-item>
  473. </el-col>
  474. </div>
  475. </el-card>
  476. </el-form>
  477. </div>
  478. <!-- <div class="flex j-c a-c" :class="{
  479. 'footer': false,
  480. }">
  481. <el-button size="small" @click="cancelForm">取消</el-button>
  482. <el-button v-if="!disabled" type="warning" size="small" @click="saveForm">保存</el-button>
  483. </div> -->
  484. </div>
  485. </template>
  486. <script>
  487. export default {
  488. name: "ProductForm",
  489. props: {
  490. form: Array,
  491. underwritingRulesForm: Object,
  492. overSize: String,
  493. cardList: Array,
  494. operator: Array,
  495. disabled: {
  496. type: Boolean,
  497. default: false,
  498. }
  499. },
  500. data() {
  501. return {
  502. sidebarItem: "clxx",
  503. localForm: { myArray: this.form },
  504. CarCollapsed: true,
  505. CarownersCollapsed: true,
  506. ApplicantCollapsed: true,
  507. InsuredCollapsed: true,
  508. insuranceTypeCollapsed: true,
  509. insurerCostFactorCollapsed: true,
  510. LicenseNoChecked: false,
  511. LicenseNoChecked1: false,
  512. };
  513. },
  514. created() {
  515. },
  516. computed: {
  517. CarAttr() {
  518. // 车辆
  519. return this.localForm.myArray.filter(item => item.attrGroup === "VehicleInformation");
  520. },
  521. CarownersAttr() {
  522. // 车主
  523. return this.localForm.myArray.filter(item => item.attrGroup === "VehicleOwnerInformation");
  524. },
  525. ApplicantAttr() {
  526. // 投保人
  527. return this.localForm.myArray.filter(item => item.attrGroup === "PolicyholderInformation");
  528. },
  529. InsuredAttr() {
  530. // 被保人
  531. return this.localForm.myArray.filter(item => item.attrGroup === "InsuredInformation");
  532. },
  533. insuranceTypeAttr() {
  534. // 险别
  535. return this.localForm.myArray.filter(item => item.attrGroup === "InsuranceInformation");
  536. },
  537. insurerCostFactorAttr() {
  538. // 保费因子
  539. return this.localForm.myArray.filter(item => item.attrGroup === "InsuranceCostFactor");
  540. }
  541. },
  542. methods: {
  543. rulesEndDateChange() {
  544. let tempStartDate = this.underwritingRulesForm.rulesStartDate;
  545. let tempEndDate = this.underwritingRulesForm.rulesEndDate;
  546. if (!tempStartDate) {
  547. this.underwritingRulesForm.rulesEndDate = null;
  548. this.$message({
  549. message: "请先选择规则起期!",
  550. type: "error",
  551. });
  552. }
  553. if (!this.validateEndDate(tempStartDate, tempEndDate)) {
  554. this.underwritingRulesForm.rulesEndDate = null;
  555. this.$message({
  556. message: "规则止期不能小于规则起期!",
  557. type: "error",
  558. });
  559. }
  560. },
  561. validateEndDate(startDateStr, endDateStr) {
  562. const startDate = new Date(startDateStr);
  563. const endDate = new Date(endDateStr);
  564. return endDate.getTime() > startDate.getTime();
  565. },
  566. scrollToSection(sectionId) {
  567. this.sidebarItem = sectionId;
  568. const element = document.getElementById(sectionId);
  569. if (element) {
  570. element.scrollIntoView({ behavior: 'smooth' });
  571. }
  572. },
  573. radiouncheck(data) {
  574. data.min = null;
  575. },
  576. //车牌全选
  577. LicenseNoCheckedChange(value, name, prop) {
  578. let carPlateCollection = this.localForm.myArray.find(val => val.attrCode == name);
  579. carPlateCollection.minArray = [];
  580. if (value) {
  581. carPlateCollection.dictLabal.forEach(element => {
  582. carPlateCollection.minArray.push(element.name)
  583. carPlateCollection[prop] = carPlateCollection.minArray.join(',');
  584. });
  585. } else {
  586. carPlateCollection.minArray = [];
  587. carPlateCollection[prop] = "";
  588. }
  589. },
  590. toggle(attr) {
  591. this[attr + 'Collapsed'] = !this[attr + 'Collapsed'];
  592. },
  593. selectoperatorChange(value, index) {
  594. this.localForm.myArray.map(val => {
  595. if (val.id === index) {
  596. val.min = null;
  597. val.max = null;
  598. }
  599. return val;
  600. })
  601. },
  602. selectChange(value, index, prop) {
  603. let data = "";
  604. value.map((ele) => {
  605. data += ele + ",";
  606. return;
  607. });
  608. this.localForm.myArray.map(val => {
  609. if (val.id === index) {
  610. val[prop] = data.slice(0, -1);
  611. }
  612. return val;
  613. })
  614. },
  615. checkboxChange(value, index, prop) {
  616. let data = "";
  617. value.map((ele) => {
  618. data += ele + ",";
  619. return;
  620. });
  621. this.localForm.myArray.map(val => {
  622. if (val.id === index) {
  623. val[prop] = data.slice(0, -1);
  624. }
  625. return val;
  626. })
  627. },
  628. saveForm() {
  629. this.$emit('saveForm', this.localForm.myArray);
  630. },
  631. cancelForm() {
  632. this.$emit('cancelForm', false);
  633. },
  634. }
  635. }
  636. </script>
  637. <style scoped lang="scss">
  638. .sidebarstyle {
  639. background: rgba(45, 77, 137, 0.1);
  640. border-radius: 4px;
  641. font-weight: bold;
  642. color: #2D4D89;
  643. }
  644. .sidebarShortcut {
  645. width: 136px;
  646. height: auto;
  647. background: #fff;
  648. padding: 0 6px;
  649. border-radius: 4px;
  650. box-sizing: border-box;
  651. font-size: 14px;
  652. ul {
  653. list-style: none;
  654. padding: 0;
  655. }
  656. ul>li {
  657. padding: 6px;
  658. box-sizing: border-box;
  659. width: 100%;
  660. margin-top: 2px;
  661. }
  662. li:hover {
  663. background: rgba(45, 77, 137, 0.1);
  664. border-radius: 4px 4px 4px 4px;
  665. color: #2D4D89;
  666. cursor: pointer;
  667. }
  668. .ornament {
  669. width: 12px;
  670. height: 12px;
  671. border-radius: 50%;
  672. background: rgba(45, 77, 137, 0.2);
  673. margin-right: 10px;
  674. }
  675. .ornament::after {
  676. content: "";
  677. width: 6px;
  678. height: 6px;
  679. background: #2D4D89;
  680. border-radius: 50%;
  681. }
  682. }
  683. .tab-panecent1 {
  684. height: 600px;
  685. width: 90%;
  686. overflow-y: auto;
  687. }
  688. /deep/ {
  689. .el-card__body {
  690. padding: 0;
  691. }
  692. .el-card__header {
  693. background-color: #F7F7F7;
  694. border: none;
  695. padding: 15px 18px;
  696. }
  697. }
  698. .margin-bom {
  699. margin-bottom: 20px;
  700. }
  701. .footer {
  702. width: 100%;
  703. position: fixed;
  704. bottom: 0;
  705. right: 0;
  706. background-color: #fff;
  707. z-index: 9;
  708. padding: 20px;
  709. box-sizing: border-box;
  710. box-shadow: 0 0 1px 0 #ccc;
  711. transition: all 0.3s, box-shadow 0.5s;
  712. &.shadow {
  713. box-shadow: 0 -10px 10px -10px #ccc;
  714. }
  715. }
  716. .clearfix {
  717. span {
  718. margin-left: 10px;
  719. font-weight: bold;
  720. }
  721. .icon-img {
  722. display: inline-block;
  723. width: 30px;
  724. height: 30px;
  725. }
  726. }
  727. </style>