IntegralCreateReviewBtn.vue 49 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449
  1. <template>
  2. <a @click="dialogCreateVisible = true" :class="{'integral-create-review-btn':true}">
  3. <el-button type="primary" plain v-if="btn_type == 1">积分录入</el-button>
  4. <el-dialog
  5. append-to-body
  6. class="integral-create-review-dialog"
  7. title="积分事件录入"
  8. width="1000px"
  9. top="50px"
  10. ref="integral_create_review_dialog"
  11. :visible.sync="dialogCreateVisible"
  12. :close-on-click-modal="false"
  13. :modal-append-to-body="false"
  14. @open="setDefaultValueForDialog"
  15. >
  16. <el-steps :active="activeIndex" finish-status="success" simple style="margin:10px 22px">
  17. <el-step title="选择奖扣对象"></el-step>
  18. <el-step title="选择分类和规则"></el-step>
  19. <el-step title="提交保存"></el-step>
  20. </el-steps>
  21. <el-row :gutter="15" style="padding:0px 30px;">
  22. <el-col :span="24" v-show="activeIndex==0" style="margin-top:10px;">
  23. <EmployeeSelector ref="EmployeeSelectorComponent" @check="set_target_ids"></EmployeeSelector>
  24. <!-- removeEmployee -->
  25. </el-col>
  26. <el-col
  27. :span="24"
  28. v-show="activeIndex==1"
  29. style="padding-left:0; padding-right:0; margin-top:10px;"
  30. >
  31. <el-form
  32. ref="newEventForm"
  33. :model="newEventForm"
  34. :rules="rules"
  35. @submit.native.prevent
  36. style="padding:0;"
  37. >
  38. <el-row>
  39. <el-col :span="8" style="padding-left:0;">
  40. <el-scrollbar
  41. wrap-class="column-wrapper scrollable-items-container check-item-box"
  42. :native="false"
  43. style="height: 450px; margin-right: 10px; border:1px solid #eee; border-bottom:1px solid #eee; border-right:1px solid #eee;"
  44. >
  45. <div style="padding:15px;">
  46. <el-tree
  47. ref="category_tree_com"
  48. highlight-current
  49. :default-expand-all="true"
  50. :expand-on-click-node="false"
  51. :data="categoryTree"
  52. @node-click="handleNodeClick"
  53. ></el-tree>
  54. </div>
  55. </el-scrollbar>
  56. <el-form-item label prop="target_id_set" style="display: none;"></el-form-item>
  57. </el-col>
  58. <el-col :span="16">
  59. <div style="padding:8px; padding-top:0;">
  60. <el-row :gutter="15" style="padding-right:0;">
  61. <el-col :span="12">
  62. <el-form-item label prop="rule_id" style="margin-bottom:0;">
  63. <el-date-picker
  64. v-model="newEventForm.event_time"
  65. type="date"
  66. value-format="timestamp"
  67. placeholder="选择日期"
  68. :picker-options="assistantOptions"
  69. style="width:100%;"
  70. ></el-date-picker>
  71. </el-form-item>
  72. <el-form-item label prop="event_time" style="margin-bottom:0;" v-if="false">
  73. <el-select
  74. placeholder="请选择规则"
  75. v-model="newEventForm.rule_id"
  76. :disabled="!newEventForm.category_id || newEventForm.category_id.length == 0"
  77. @change="loadAvailableItems(newEventForm, initializeItemData)"
  78. style="width:100%;"
  79. >
  80. <el-option
  81. v-for="(item,idx) in availableRuleOptions"
  82. :key="idx"
  83. :label="item.name"
  84. :value="item.id"
  85. ></el-option>
  86. </el-select>
  87. </el-form-item>
  88. </el-col>
  89. <el-col :span="12" style="padding-right:0; text-align: right;">
  90. <el-button v-if="diy_review == false && newEventForm.category_id.length > 0 && newEventForm.category_id[0] > 0" @click="diy_review = true"
  91. type="text">没有匹配的规则?我要自定义录入 >> </el-button>
  92. <el-button v-if="diy_review" @click="diy_review = false"
  93. type="text"> <<选择已有规则录入</el-button>
  94. </el-col>
  95. </el-row>
  96. </div>
  97. <el-form-item label prop="category_id" style="display: none;"></el-form-item>
  98. <el-scrollbar
  99. wrap-class="column-wrapper scrollable-items-container check-item-box"
  100. :native="false"
  101. style="height: 396px;"
  102. v-loading="setformloading"
  103. >
  104. <div v-for="(item1, key1) in newEventForm.items">
  105. <h3 style="padding-left:15px;">{{item1.name}}</h3>
  106. <el-form-item
  107. v-for="(item, key) in item1.item_list"
  108. :key="key"
  109. :prop="'items.' + key1+'.item_list.'+key"
  110. :rules="itemRules"
  111. style="padding-left:10px; overflow: hidden; margin-bottom:0;"
  112. >
  113. <el-tooltip
  114. :disabled="diy_review"
  115. class="item"
  116. effect="dark"
  117. :content="item.content"
  118. placement="left-start"
  119. >
  120. <el-card shadow="hover" style="margin-bottom: 15px; padding:0;">
  121. <el-checkbox class="diy-checkbox" v-if="diy_review == false"
  122. style="text-overflow:ellipsis; width:100%; overflow: hidden; line-height: 1; padding:15px;"
  123. v-model="item.checked"
  124. :label="item.content"
  125. ></el-checkbox>
  126. <div style="clear:both;"></div>
  127. <div style="padding:15px; padding-top:0;" v-show="item.checked">
  128. <span v-if="diy_review == false"
  129. style="display: block; float: left; line-height: 36px; margin-top:10px;"
  130. class="gap-left-8"
  131. >{{ generatePointIndication(item) }}</span>
  132. <el-select v-if="diy_review" v-model="item.point_type" placeholder="请选择" style=" float:left; margin-right:15px; margin-top:10px; width:73px;">
  133. <el-option
  134. label="A分"
  135. :value="1">
  136. </el-option>
  137. <el-option
  138. label="B分"
  139. :value="0">
  140. </el-option>
  141. </el-select>
  142. <el-input-number
  143. class="gap-left-8"
  144. v-model="item.point"
  145. v-show="item.checked && diy_review"
  146. style="width:150px; float:left; margin-right:15px; margin-top:10px;"
  147. ></el-input-number>
  148. <div style="float:right;">
  149. <el-button type="text" v-if="diy_review && item1.item_list.length > 1" @click="del_diy_item(key)">移除</el-button> <el-button type="text" v-if="diy_review" @click="add_diy_item"> 增加一条</el-button></div>
  150. <div style="clear: both;"></div>
  151. <el-input-number
  152. class="gap-left-8"
  153. v-model="item.point"
  154. :min="item.value_1"
  155. :disabled="(item.value_2 == item.value_1 || item.is_range==0)?true:false"
  156. :max="item.is_range ? item.value_2 : item.value_1"
  157. v-show="item.checked && diy_review == false"
  158. style="width:150px; float:right; margin-left:15px; margin-top:10px;"
  159. ></el-input-number>
  160. <div style="clear:both;"></div>
  161. <upload_oss
  162. :headers="Xtoken"
  163. class="avatar-uploader"
  164. style="margin-top:10px;"
  165. :action="'http://'+'integralsys.oss-cn-shenzhen.aliyuncs.com'"
  166. :show-file-list="true"
  167. multiple
  168. :limit="3"
  169. :on-exceed="handleExceed"
  170. :on-success="(res,file)=>{ return handleSuccess(res, file,key, key1)}"
  171. :before-upload="beforeFilesUpload"
  172. :on-remove="(file)=>{ return handleRemove(file, key, key1)}"
  173. :file-list="fileList"
  174. :on-preview="onFilePreView"
  175. v-model="item.file_list"
  176. >
  177. <!-- v-model="item.file_list" -->
  178. <!-- <span style="margin-right:5px;">图片上传</span> -->
  179. <el-button size="mini" type="primary">图片上传</el-button>
  180. <span>(选填,最多上传三张)</span>
  181. </upload_oss>
  182. <!-- <div style="display:none;">
  183. <img
  184. v-for="(item,index) in file_list"
  185. :key="index"
  186. v-if="(['jpg', 'png', 'bmp', 'jpeg','JPG','PNG']).indexOf(item.name.split('.')[1]) >= 0"
  187. :src="serverdomain+item.url"
  188. :preview="index"
  189. :preview-text="item.name"
  190. >
  191. </div> -->
  192. <el-form-item
  193. class="gap-top-8"
  194. v-show="item.checked"
  195. auto-complete="off"
  196. style="margin-top:15px; width:100%;"
  197. >
  198. <el-input v-model="item.remark" placeholder="备注" type="textarea"></el-input>
  199. </el-form-item>
  200. </div>
  201. </el-card>
  202. </el-tooltip>
  203. </el-form-item>
  204. </div>
  205. </el-scrollbar>
  206. </el-col>
  207. </el-row>
  208. </el-form>
  209. </el-col>
  210. </el-row>
  211. <el-row :gutter="15" style="margin:0 15px;" v-show="activeIndex == 2">
  212. <el-col :span="7">
  213. <el-card class="box-card card-box-item" shadow="never" style="margin-top:15px;">
  214. <el-scrollbar
  215. wrap-class="column-wrapper scrollable-items-container check-item-box dept_tree"
  216. :native="false"
  217. style="height: 350px;"
  218. >
  219. <div style="padding-right:15px;">
  220. <el-table
  221. :data="target_list"
  222. :border="false"
  223. tooltip-effect="dark"
  224. style="width: 100%"
  225. >
  226. <el-table-column prop="name" :label="'已选择人员('+(target_list.length)+'人)'">
  227. <template slot-scope="scope">
  228. <div class="rank_head" style="cursor: pointer;">
  229. <img
  230. v-if="scope.row.img_url != null"
  231. v-bind:src="scope.row.img_url"
  232. width="42px"
  233. height="42px"
  234. >
  235. <img
  236. v-if="scope.row.img_url == null"
  237. src="static/images/head_default.png"
  238. width="42px"
  239. height="42px"
  240. >
  241. {{scope.row.name}}
  242. </div>
  243. </template>
  244. </el-table-column>
  245. </el-table>
  246. </div>
  247. </el-scrollbar>
  248. </el-card>
  249. </el-col>
  250. <el-col :span="17" style="margin-top: 15px;">
  251. <div>
  252. <span style="margin-right:5px; color: #000">递交审批</span>
  253. <el-select
  254. v-model="reviewer_other_ids"
  255. filterable
  256. multiple
  257. :multiple-limit="1"
  258. placeholder="选填"
  259. class="gap-right-8"
  260. style="width:380px;"
  261. >
  262. <el-option
  263. v-for="(reviewItem,idx) of employerList"
  264. :key="idx"
  265. :label="reviewItem.name"
  266. :disabled="newEventForm.target_id_set.indexOf(reviewItem.id) >=0"
  267. :value="reviewItem.id"
  268. ></el-option>
  269. </el-select>
  270. </div>
  271. <!-- </el-form-item> -->
  272. <div v-for="(item1, key1) in newEventForm.items">
  273. <el-card
  274. v-for="(item,index) in item1.item_list"
  275. :key="index"
  276. v-if="item.checked"
  277. class="box-card card-box-item"
  278. shadow="hover"
  279. style="margin-top:15px; padding:0"
  280. >
  281. <p>{{item.content}}</p>
  282. <p>备注:{{item.remark}}</p>
  283. <!-- <p>???{{item}}</p> -->
  284. <p v-if="item.is_negative == 0 || (item.point > 0 && diy_review)">奖分:
  285. <el-tag>{{item.point}}</el-tag>
  286. <span>{{item.point_type === 0?'B分':'A分'}}</span>
  287. </p>
  288. <p v-if="item.is_negative == 1 || (item.point < 0 && diy_review)">扣分:
  289. <el-tag type="danger">{{item.point}}</el-tag>
  290. <span>{{item.point_type === 0?'B分':'A分'}}</span>
  291. </p>
  292. </el-card>
  293. </div>
  294. </el-col>
  295. </el-row>
  296. <div slot="footer" class="dialog-footer">
  297. <el-button @click="cancelHandle">取 消</el-button>
  298. <el-button @click="activeIndexPrev" v-show="activeIndex > 0">上一步</el-button>
  299. <el-button @click="activeIndexNext" type="primary" v-show="activeIndex < 2">下一步</el-button>
  300. <el-button
  301. v-show="activeIndex == 2"
  302. :loading="submitLoading"
  303. type="primary"
  304. @click="submitCreateForm('newEventForm')"
  305. >提 交</el-button>
  306. </div>
  307. </el-dialog>
  308. <div class="card-panel" v-if="btn_type==0">
  309. <div class="tpzs3"></div>
  310. <div class="card-panel-description">
  311. <div class="card-panel-text">积分录入</div>
  312. <div class="card-panel-text2">按规则进行奖扣</div>
  313. </div>
  314. </div>
  315. <div style="display:none;">
  316. <img
  317. v-for="(item,index) in file_list"
  318. :key="index"
  319. v-if="(['jpg', 'png', 'bmp', 'jpeg','JPG','PNG']).indexOf(item.name.split('.')[1]) >= 0"
  320. :src="item.url"
  321. :preview="index"
  322. :preview-text="item.name"
  323. >
  324. </div>
  325. </a>
  326. </template>
  327. <script>
  328. import EmployeeSelector from '@/views/integral/EmployeeSelector'
  329. import { getToken } from '@/utils/auth'
  330. import Vue from 'vue'
  331. import preview from 'vue-photo-preview'
  332. import 'vue-photo-preview/dist/skin.css'
  333. import upload_oss from '@/views/upload_oss/upload'
  334. Vue.use(preview, {
  335. tapToClose: false
  336. })
  337. export default {
  338. components: { EmployeeSelector,upload_oss },
  339. props: {
  340. btn_type: {
  341. type: Number,
  342. default: 0
  343. }
  344. },
  345. name: 'IntegralCreateReviewBtn',
  346. watch: {
  347. diy_review: function(val, old) {
  348. if (val) {
  349. this.newEventForm.items = [{ 'id': 0, 'name': '', 'item_list': [{ 'is_add': 0, 'remark': '', 'id': 0, 'content': '', 'rule_id': 0, 'is_range': 1, 'point_type': 0, 'point': 1, checked: true, file_list: [] }] }]
  350. } else {
  351. this.loadAvailableRules(this.newEventForm)
  352. }
  353. }
  354. },
  355. data() {
  356. const validateTarget = (rule, value, callback) => {
  357. if (!value || value.length == 0) {
  358. this.$message({
  359. message: '请选择奖扣积分对象',
  360. type: 'error'
  361. })
  362. return callback(new Error('请选择奖扣积分对象'))
  363. } else {
  364. callback()
  365. }
  366. }
  367. const validateCategory = (rule, value, callback) => {
  368. if (!value || value.length == 0) {
  369. return callback(new Error('请选择积分分类'))
  370. } else {
  371. callback()
  372. }
  373. }
  374. const validateRule = (rule, value, callback) => {
  375. if (!value || isNaN(value)) {
  376. return callback(new Error('请选择积分规则'))
  377. } else {
  378. callback()
  379. }
  380. }
  381. const validateItem = (rule, value, callback) => {
  382. if ((isNaN(value.point) || parseInt(value.point) == 0) && value.checked == true) {
  383. return callback(new Error('请填写有效的积分数值'))
  384. }
  385. callback()
  386. }
  387. return {
  388. diy_review: false,
  389. Xtoken: { 'X-Token': getToken() },
  390. fileList: [],
  391. file_list: [],
  392. reviewer_other_ids: [],
  393. employerList: [],
  394. setformloading: false,
  395. submitLoading: false,
  396. activeIndex: 0,
  397. dialogWidth: '510px',
  398. dialogWidth_left: 16,
  399. dialogWidth_right: 0,
  400. dialogWidth_employee: 8,
  401. profile: this.$store.getters.user_info,
  402. totalCount: 0,
  403. tableData: null,
  404. currentPage: 1,
  405. multipleSelection: [],
  406. dialogCreateVisible: false,
  407. dialogEditVisible: false,
  408. dialogExcelVisible: false,
  409. formLabelWidth: '90px',
  410. newEventForm: {
  411. target_id_set: [],
  412. category_id: [],
  413. rule_id: '',
  414. event_time: '',
  415. items: []
  416. },
  417. eventForm: {
  418. id: '',
  419. target_name: '',
  420. event_time: '',
  421. category_path: '',
  422. rule_name: '',
  423. point: '',
  424. remark: '',
  425. item: {
  426. content: '',
  427. is_range: false,
  428. is_negative: false,
  429. point_type: '',
  430. value_1: 0,
  431. value_2: 0
  432. }
  433. },
  434. target_list: [],
  435. itemSelectForm: {
  436. target_id_set: [],
  437. category_id: [],
  438. rule_id: '',
  439. event_time: '',
  440. items: [],
  441. get_category: 1
  442. },
  443. selectedItems: [],
  444. rules: {
  445. target_id_set: [{ validator: validateTarget, trigger: 'blur' }],
  446. category_id: [{ validator: validateCategory, trigger: 'blur' }]
  447. // rule_id: [{ validator: validateRule, trigger: 'v' }]
  448. },
  449. itemRules: {
  450. validator: validateItem,
  451. trigger: 'blur'
  452. },
  453. deptTree: [],
  454. filter: {
  455. keywords: '',
  456. target_id_set: [],
  457. category_id: [],
  458. point_type: 0,
  459. time_range: ''
  460. },
  461. categoryTree: [],
  462. employeeOptions: [],
  463. pointTypes: [],
  464. availableRuleOptions: [],
  465. assistantOptions: {
  466. disabledDate(time) {
  467. return time.getTime() > Date.now()
  468. },
  469. shortcuts: [
  470. {
  471. text: '今天',
  472. onClick(picker) {
  473. picker.$emit('pick', new Date())
  474. }
  475. },
  476. {
  477. text: '昨天',
  478. onClick(picker) {
  479. const date = new Date()
  480. date.setTime(date.getTime() - 3600 * 1000 * 24)
  481. picker.$emit('pick', date)
  482. }
  483. }
  484. ]
  485. },
  486. instantPickerOptions: {
  487. shortcuts: [
  488. {
  489. text: '本周',
  490. onClick(picker) {
  491. const now = new Date(new Date().toLocaleDateString())
  492. const start =
  493. now.getTime() - (now.getDay() - 1) * 24 * 60 * 60 * 1000
  494. const end = start + 7 * 24 * 60 * 60 * 1000 - 1000
  495. picker.$emit('pick', [start, end])
  496. }
  497. },
  498. {
  499. text: '上周',
  500. onClick(picker) {
  501. const now = new Date(new Date().toLocaleDateString())
  502. const start =
  503. now.getTime() - (now.getDay() + 6) * 24 * 60 * 60 * 1000
  504. const end = start + 7 * 24 * 60 * 60 * 1000 - 1000
  505. picker.$emit('pick', [start, end])
  506. }
  507. },
  508. {
  509. text: '本月',
  510. onClick(picker) {
  511. const now = new Date()
  512. const startDate = new Date(now.getFullYear(), now.getMonth(), 1)
  513. const endDate = new Date(now.getFullYear(), now.getMonth() + 1, 0)
  514. picker.$emit('pick', [startDate.getTime(), endDate.getTime()])
  515. }
  516. },
  517. {
  518. text: '上月',
  519. onClick(picker) {
  520. const now = new Date()
  521. const startDate = new Date(
  522. now.getFullYear() - (now.getMonth() > 0 ? 0 : 1),
  523. (now.getMonth() + 11) % 12,
  524. 1
  525. )
  526. const endDate = new Date(now.getFullYear(), now.getMonth(), 0)
  527. picker.$emit('pick', [startDate.getTime(), endDate.getTime()])
  528. }
  529. }
  530. ]
  531. }
  532. }
  533. },
  534. methods: {
  535. add_diy_item() {
  536. this.newEventForm.items[0].item_list.push({ 'is_add': 0, 'remark': '', 'id': 0, 'content': '', 'rule_id': 0, 'is_range': 1, 'point_type': 0, 'point': 1, checked: true, file_list: [] })
  537. },
  538. del_diy_item(key) {
  539. this.newEventForm.items[0].item_list.splice(key, 1)
  540. },
  541. onFilePreView(file) {
  542. console.log(file)
  543. // 点击时查看图片
  544. const $ext_list1 = ['jpg', 'png', 'bmp', 'jpeg','JPG','PNG']
  545. const $ext_name1 = file.name.split('.')[1]
  546. if ($ext_list1.indexOf($ext_name1) >= 0) {
  547. window.open(file.url)
  548. }
  549. // if ($ext_list1.indexOf($ext_name1) >= 0) {
  550. // // console.log(this.serverdomain + file.response.url)
  551. // let ii = 0
  552. // for (const i in this.file_list) {
  553. // console.log(this.file_list[i].name)
  554. // if (
  555. // ['jpg', 'png', 'bmp', 'jpeg','JPG','PNG'].indexOf(
  556. // this.file_list[i].name.split('.')[1]
  557. // ) >= 0
  558. // ) {
  559. // if (this.file_list[i].name == file.response.file_name) {
  560. // // console.log(ii)
  561. // this.openPhotoSwipe(
  562. // ii,
  563. // document.querySelectorAll('img[preview]')
  564. // )
  565. // return
  566. // }
  567. // ii++
  568. // }
  569. // }
  570. // }
  571. },
  572. handleRemove(file, id) {
  573. let delIndex = -1
  574. this.file_list.forEach((item, idx) => {
  575. if (item.url === file.response.url && id === item.index) {
  576. delIndex = idx
  577. return false
  578. }
  579. })
  580. this.file_list.splice(delIndex, 1)
  581. },
  582. beforeFilesUpload(file) {
  583. const $ext_list = ['jpg', 'png', 'bmp', 'jpeg','JPG','PNG']
  584. const $ext_name = file.name.split('.')[1]
  585. if ($ext_list.indexOf($ext_name) === -1) {
  586. this.$message.warning('不支持的文件格式')
  587. return false
  588. }
  589. },
  590. random_string(len) {
  591. len = len || 32
  592. var chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678'
  593. var maxPos = chars.length
  594. var pwd = ''
  595. for (let i = 0; i < len; i++) {
  596. pwd += chars.charAt(Math.floor(Math.random() * maxPos))
  597. }
  598. return pwd
  599. },
  600. handleSuccess(res, file,ids, key1) {
  601. console.log(file)
  602. let randomStr = this.random_string(32)
  603. let kname = file.name;
  604. console.log(kname)
  605. console.log(res.url)
  606. this.newEventForm.items[key1].item_list[ids].file_list.push({ url: res.url, name: kname})
  607. console.log(this.newEventForm)
  608. // this.file_list.push({index: ids, url: res.url, name: res.file_name })
  609. },
  610. handleExceed(files, fileList) {
  611. this.$message.warning(
  612. `当前限制选择 3 个文件,本次选择了 ${
  613. files.length
  614. } 个文件,共选择了 ${files.length + fileList.length} 个文件`
  615. )
  616. },
  617. activeIndexNext() {
  618. const self = this
  619. if (
  620. this.activeIndex == 0 &&
  621. self.newEventForm.target_id_set.length == 0
  622. ) {
  623. this.$message({
  624. message: '请选择奖扣积分对象',
  625. type: 'error'
  626. })
  627. return false
  628. }
  629. if (this.activeIndex == 1 && this.diy_review) {
  630. for (const i in self.newEventForm.items[0].item_list) {
  631. if (self.newEventForm.items[0].item_list[i].remark == '') {
  632. this.$message({
  633. message: '请填写完整的事件备注',
  634. type: 'error'
  635. })
  636. return false
  637. }
  638. if (self.newEventForm.category_id <= 0) {
  639. this.$message({
  640. message: '请选择积分分类',
  641. type: 'error'
  642. })
  643. return false
  644. }
  645. }
  646. }
  647. if (this.activeIndex == 1) {
  648. if (self.newEventForm.category_id <= 0) {
  649. this.$message({
  650. message: '请选择积分分类',
  651. type: 'error'
  652. })
  653. return false
  654. }
  655. }
  656. if (this.activeIndex == 1) {
  657. /* if (self.newEventForm.rule_id == '') {
  658. this.$message({
  659. message: '请选择积分规则',
  660. type: 'error'
  661. // customClass:'msgCustomClass'
  662. })
  663. return false
  664. }*/
  665. let checked = 0
  666. for (const j in this.newEventForm.items) {
  667. for (const i in this.newEventForm.items[j].item_list) {
  668. if (this.newEventForm.items[j].item_list[i].checked) {
  669. checked++
  670. }
  671. }
  672. }
  673. if (checked == 0) {
  674. this.$message({
  675. message: '没有选中积分细则',
  676. type: 'error'
  677. })
  678. return false
  679. }
  680. }
  681. this.activeIndex++
  682. },
  683. activeIndexPrev() {
  684. this.activeIndex--
  685. },
  686. dateFormatter: function(row, column, cellValue) {
  687. return this.$moment(cellValue * 1000).format('YYYY年MM月DD日')
  688. },
  689. // employee_checked(dd){console.log(dd,'dfasdfa')},
  690. set_target_ids(data) {
  691. const self = this
  692. self.newEventForm.target_id_set = []
  693. for (const i in data) {
  694. self.newEventForm.target_id_set.push(data[i].id)
  695. }
  696. self.target_list = data
  697. },
  698. handleNodeClick(data) {
  699. this.newEventForm.category_id = [data.value]
  700. this.loadAvailableRules(this.newEventForm)
  701. },
  702. loadPointType: function() {
  703. var self = this
  704. this.$http('get','/integral.php/ajax_request_common/get_point_types')
  705. .then(function(response) {
  706. if (response.status == 200) {
  707. const jsonData = response.data
  708. try {
  709. self.pointTypes = jsonData
  710. } catch (err) {
  711. console.log(err)
  712. }
  713. }
  714. })
  715. .catch(function(error) {
  716. console.log(error)
  717. })
  718. },
  719. toggleSelection: function(rows) {
  720. if (rows) {
  721. rows.forEach(row => {
  722. this.$refs.multipleTable.toggleRowSelection(row)
  723. })
  724. } else {
  725. this.$refs.multipleTable.clearSelection()
  726. }
  727. },
  728. // 选择积分分类时更新积分规则
  729. loadAvailableRules: function(formObj) {
  730. if (this.diy_review) {
  731. return
  732. }
  733. this.setformloading = true
  734. if (!formObj) {
  735. return
  736. }
  737. const categoryPath = formObj.category_id
  738. if (!categoryPath || categoryPath.length == 0) {
  739. return
  740. }
  741. var self = this
  742. this.$http('get','/integral.php/ajax_request_common/get_integral_rules_by_category',{category_id: categoryPath[categoryPath.length - 1]})
  743. .then(function(response) {
  744. self.setformloading = false
  745. if (response.status == 200) {
  746. const jsonData = response.data
  747. try {
  748. self.availableRuleOptions = jsonData
  749. formObj.rule_id = ''
  750. formObj.items = []
  751. self.loadAvailableItems(formObj, self.initializeItemData)
  752. } catch (err) {
  753. console.log(err)
  754. }
  755. }
  756. })
  757. .catch(function(error) {
  758. console.log(error)
  759. })
  760. },
  761. // 选择积分规则时更新细则列表
  762. loadAvailableItems: function(formObj, callback) {
  763. const self = this
  764. if (!formObj) {
  765. return
  766. }
  767. const ruleId = formObj.rule_id
  768. if (isNaN(ruleId) || ruleId < 0) {
  769. return
  770. }
  771. const params = {
  772. rule_id: ruleId
  773. }
  774. if (formObj.get_category) {
  775. params.get_category = formObj.get_category
  776. }
  777. const categoryPath = formObj.category_id
  778. if (!categoryPath || categoryPath.length == 0) {
  779. return
  780. }
  781. params.category_id = categoryPath[categoryPath.length - 1]
  782. this.$http('get','/integral.php/ajax_request_common/get_integral_items_by_category_id',params)
  783. .then(function(response) {
  784. if (response.status == 200) {
  785. let jsonData = response.data
  786. try {
  787. if (callback) {
  788. jsonData = callback.call(null, jsonData)
  789. }
  790. formObj.items = jsonData
  791. // 新增
  792. formObj.items.forEach(item => {
  793. for (const i in item.item_list) {
  794. item.item_list[i].file_list = []
  795. }
  796. })
  797. } catch (err) {
  798. console.log(err)
  799. }
  800. }
  801. })
  802. .catch(function(error) {
  803. console.log(error)
  804. })
  805. },
  806. initializeItemData: function(jsonData) {
  807. for (let index1 = 0; index1 < jsonData.length; index1++) {
  808. for (let index = 0; index < jsonData[index1].item_list.length; index++) {
  809. const item = jsonData[index1].item_list[index]
  810. item.checked = false
  811. item.point = item.value_1
  812. item.remark = ''
  813. }
  814. }
  815. return jsonData
  816. },
  817. applyItemSelection: function(jsonData) {
  818. const selectedItemIds = this.selectedItems.map(x => x.id)
  819. for (let index = 0; index < jsonData.length; index++) {
  820. const item = jsonData[index]
  821. item.checked = selectedItemIds.indexOf(item.id) > -1
  822. }
  823. return jsonData
  824. },
  825. generatePointIndication: function(item) {
  826. const propertyText = item.is_negative == 1 ? '扣除' : '奖励'
  827. const valueText =
  828. item.is_range == 1 ? item.value_1 + '~' + item.value_2 : item.value_1
  829. let typeText = ''
  830. for (let index = 0; index < this.pointTypes.length; index++) {
  831. const pointType = this.pointTypes[index]
  832. if (item.point_type == pointType.value) {
  833. typeText = pointType.label
  834. break
  835. }
  836. }
  837. return '标准: ' + propertyText + ' ' + valueText + ' ' + typeText
  838. },
  839. handleSelectionChange: function(val) {
  840. this.multipleSelection = val
  841. },
  842. resetCreateDialog: function() {
  843. this.newEventForm.rule_id = ''
  844. this.newEventForm.items = []
  845. if (this.diy_review) {
  846. this.newEventForm.items = [{ 'id': 0, 'name': '', 'item_list': [{ 'is_add': 0, 'remark': '', 'id': 0, 'content': '', 'rule_id': 0, 'is_range': 1, 'point_type': 0, 'point': 1, checked: true, file_list: [] }] }]
  847. }
  848. this.dialogWidth = '510px'
  849. // this.newEventForm.category_id = []
  850. this.newEventForm.rule_id = ''
  851. // this.newEventForm.event_time = ''
  852. // this.newEventForm.items = []
  853. this.file_list = []
  854. const form = this.$refs['newEventForm']
  855. form.clearValidate()
  856. // this.activeIndex = 0;
  857. },
  858. cancelHandle() {
  859. this.dialogCreateVisible = false
  860. this.resetCreateDialog()
  861. this.activeIndex = 0
  862. // this.$refs.EmployeeSelectorComponent.
  863. },
  864. openEditDialog: function(eventId) {
  865. var self = this
  866. this.$http('get','/integral.php/ajax_request_common/get_event_detail',{id: eventId})
  867. .then(function(response) {
  868. if (response.status == 200) {
  869. const jsonData = response.data
  870. try {
  871. self.eventForm = self.processDetailData(jsonData)
  872. self.dialogEditVisible = true
  873. } catch (err) {
  874. console.log(err)
  875. }
  876. }
  877. })
  878. .catch(function(error) {
  879. console.log(error)
  880. })
  881. },
  882. onDismissEditDialog: function() {
  883. const form = this.$refs['eventForm']
  884. form.clearValidate()
  885. this.eventForm = {
  886. id: '',
  887. target_name: '',
  888. event_time: '',
  889. category_path: '',
  890. rule_name: '',
  891. point: '',
  892. remark: '',
  893. item: {
  894. content: '',
  895. is_range: false,
  896. is_negative: false,
  897. point_type: '',
  898. value_1: 0,
  899. value_2: 0
  900. }
  901. }
  902. },
  903. submitCreateForm: function(formName) {
  904. var form = this.$refs[formName]
  905. var self = this
  906. form.validate((valid,e) => {
  907. if (valid) {
  908. if (form) {
  909. self.sendCreateRequest()
  910. }
  911. } else {
  912. console.log('验证未通过')
  913. return false
  914. }
  915. })
  916. },
  917. sendCreateRequest: function() {
  918. const dataObj = JSON.parse(JSON.stringify(this.newEventForm))
  919. console.log(dataObj, 11111111)
  920. const formData = {}
  921. const emptyItems = []
  922. const items = []
  923. console.log('926')
  924. for (const item in dataObj) {
  925. if (item == 'category_id') {
  926. formData['category_id'] = dataObj[item]
  927. continue
  928. }
  929. if (item == 'items') {
  930. // for(let item1 in dataObj[item].item_list){
  931. console.log(dataObj[item])
  932. for (const item1 in dataObj[item]) {
  933. const checkedRuleItems = dataObj[item][item1].item_list.filter(x => x.checked)
  934. if (checkedRuleItems && checkedRuleItems.length > 0) {
  935. emptyItems.push(true)
  936. }
  937. this.file_list.forEach(fileItem => {
  938. checkedRuleItems.forEach((innerItem, idx) => {
  939. if (fileItem.index === idx) {
  940. console.log(innerItem)
  941. // innerItem.file_list.push({ name: fileItem.name, url: fileItem.url })
  942. }
  943. })
  944. })
  945. for (const i in checkedRuleItems) {
  946. checkedRuleItems[i]['content'] = checkedRuleItems[i].remark
  947. items.push(checkedRuleItems[i])
  948. }
  949. }
  950. for(let i in items){
  951. items[i]['category_id'] = dataObj['category_id'][dataObj['category_id'].length - 1]
  952. }
  953. formData[item] = JSON.stringify(items)
  954. // }
  955. console.log('967')
  956. } else if (item == 'target_id_set') {
  957. formData[item] = dataObj[item].join(',')
  958. } else if (item == 'event_time') {
  959. formData[item] = parseInt(dataObj[item] / 1000)
  960. } else {
  961. formData[item] = dataObj[item]
  962. }
  963. }
  964. if (emptyItems.length == 0) {
  965. this.$message({
  966. message: '没有选中积分细则',
  967. type: 'error'
  968. })
  969. return
  970. }
  971. formData['recorder_id'] = this.profile.id
  972. formData['reviewer_other_ids'] = this.reviewer_other_ids
  973. var self = this
  974. self.submitLoading = true
  975. this.$http('post','/integral.php/ajax_request_common/record_integral_event',formData,'','',
  976. {transformRequest: [
  977. data => {
  978. const paramArray = new Array()
  979. for (const it in data) {
  980. paramArray.push(
  981. encodeURIComponent(it) + '=' + encodeURIComponent(data[it])
  982. )
  983. }
  984. return paramArray.join('&')
  985. }
  986. ]},
  987. // headers: {
  988. // 'Content-Type': 'application/x-www-form-urlencoded'
  989. // }
  990. )
  991. .then(function(response) {
  992. self.submitLoading = false
  993. let message = ''
  994. let status = 0
  995. if (response.status == 200) {
  996. const data = response.data
  997. status = isNaN(data.status) ? 0 : parseInt(data.status)
  998. switch (status) {
  999. case 1:
  1000. message = data.info
  1001. break
  1002. case -1:
  1003. message = '表单参数错误'
  1004. break
  1005. default:
  1006. message = data.info ? data.info : '积分事件录入失败'
  1007. }
  1008. } else {
  1009. message = '服务器出现问题'
  1010. }
  1011. if (status == 1) {
  1012. let content = ''
  1013. response.data.results.forEach((item, idx) => {
  1014. if (item.point > 0) {
  1015. content += `<div style="color: #606266; font-size: 16px; margin-left: 20px;">${idx +
  1016. 1}.${item.employee.name} 奖励${item.point} ${
  1017. item.point_type
  1018. } ${item.info}</div>`
  1019. } else {
  1020. const score = parseInt(item.point)
  1021. content += `<div style="color: #606266; font-size: 16px; margin-left: 20px;">${idx +
  1022. 1}.${item.employee.name} 扣除${score} ${
  1023. item.point_type
  1024. } ${item.info}</div>`
  1025. }
  1026. })
  1027. content += `<div style="margin-top:20px;">可在数据统计→<a style="color:#689bff" href="/#/event_manage" target="_blank">积分事件中查看哦</a></div>`
  1028. self
  1029. .$confirm(content, response.data.info, {
  1030. dangerouslyUseHTMLString: true,
  1031. confirmButtonText: '继续录入',
  1032. cancelButtonText: '不录入了',
  1033. showClose: false
  1034. }).then(() => {
  1035. console.log("fffff")
  1036. let id = {
  1037. columnKey: 'clear'
  1038. };
  1039. self.$refs.EmployeeSelectorComponent.clearEmployee(id);
  1040. self.fileList = []
  1041. self.activeIndex = 0
  1042. self.newEventForm.target_id_set = []
  1043. self.newEventForm.category_id = []
  1044. self.newEventForm.items = []
  1045. self.newEventForm.rule_id = ''
  1046. self.newEventForm.event_time = new Date().getTime()
  1047. })
  1048. .catch(() => {
  1049. console.log("j")
  1050. console.log(self.$refs.EmployeeSelectorComponent)
  1051. self.fileList = []
  1052. let id = {
  1053. columnKey: 'clear'
  1054. };
  1055. self.$refs.EmployeeSelectorComponent.clearEmployee(id);
  1056. self.dialogCreateVisible = false
  1057. self.activeIndex = 0
  1058. self.newEventForm.target_id_set = []
  1059. self.newEventForm.category_id = []
  1060. self.newEventForm.items = []
  1061. self.newEventForm.rule_id = ''
  1062. self.newEventForm.event_time = ''
  1063. })
  1064. } else {
  1065. self.$message({
  1066. message: message,
  1067. type: 'error'
  1068. })
  1069. }
  1070. if (status == 1) {
  1071. // self.dialogCreateVisible = false
  1072. self.resetCreateDialog()
  1073. }
  1074. })
  1075. .catch(function(error) {
  1076. console.log(error)
  1077. })
  1078. },
  1079. sendEditRequest: function() {
  1080. const dataObj = this.eventForm
  1081. if (isNaN(dataObj.point) || !dataObj.point) {
  1082. this.$message({
  1083. message: '请填写积分数值',
  1084. type: 'error'
  1085. })
  1086. this.$refs['pointEditor'].focus()
  1087. return
  1088. }
  1089. const formData = {
  1090. id: dataObj.id,
  1091. event_time: parseInt(dataObj.event_time / 1000),
  1092. point: dataObj.point,
  1093. remark: dataObj.remark,
  1094. is_negative: dataObj.item.is_negative
  1095. }
  1096. var self = this
  1097. this.$http('post','/integral.php/ajax_request_common/update_event',formData,'','',
  1098. {transformRequest: [
  1099. data => {
  1100. const paramArray = new Array()
  1101. for (const it in data) {
  1102. paramArray.push(
  1103. encodeURIComponent(it) + '=' + encodeURIComponent(data[it])
  1104. )
  1105. }
  1106. return paramArray.join('&')
  1107. }
  1108. ]},
  1109. // headers: {
  1110. // 'Content-Type': 'application/x-www-form-urlencoded'
  1111. // }
  1112. )
  1113. .then(function(response) {
  1114. let message = ''
  1115. let status = 0
  1116. if (response.status == 200) {
  1117. const data = response.data
  1118. status = isNaN(data.status) ? 0 : parseInt(data.status)
  1119. switch (status) {
  1120. case 1:
  1121. message = '修改积分事件成功'
  1122. break
  1123. case -1:
  1124. message = '表单参数错误'
  1125. break
  1126. default:
  1127. message = '修改积分事件失败'
  1128. }
  1129. } else {
  1130. message = '服务器出现问题'
  1131. }
  1132. self.$message({
  1133. message: message,
  1134. type: status == 1 ? 'success' : 'error'
  1135. })
  1136. if (status == 1) {
  1137. self.loadEventList()
  1138. self.dialogEditVisible = false
  1139. }
  1140. })
  1141. .catch(function(error) {
  1142. console.log(error)
  1143. })
  1144. },
  1145. confirmDelete(eventId) {
  1146. this.$confirm('确定要删除此积分事件吗?', '删除积分事件', {
  1147. confirmButtonText: '确定',
  1148. cancelButtonText: '取消',
  1149. type: 'warning'
  1150. })
  1151. .then(() => {
  1152. this.deleteItem(eventId)
  1153. })
  1154. .catch(() => {
  1155. // console.log('已取消删除');
  1156. })
  1157. },
  1158. confirmMultipleDelete() {
  1159. if (this.multipleSelection.length < 1) {
  1160. return false
  1161. }
  1162. this.$confirm('确定要删除选中的积分事件吗?', '批量删除积分事件', {
  1163. confirmButtonText: '确定',
  1164. cancelButtonText: '取消',
  1165. type: 'warning'
  1166. })
  1167. .then(() => {
  1168. const targetArr = []
  1169. for (const index in this.multipleSelection) {
  1170. targetArr.push(this.multipleSelection[index].id)
  1171. }
  1172. const targetIds = targetArr.join(',')
  1173. this.deleteItem(targetIds, true)
  1174. })
  1175. .catch(() => {
  1176. // console.log('已取消删除');
  1177. })
  1178. },
  1179. deleteItem(eventId, isMultiple) {
  1180. if (!eventId) {
  1181. return false
  1182. }
  1183. isMultiple = isMultiple || false
  1184. let url = ''
  1185. let params = null
  1186. if (isMultiple) {
  1187. url = '/integral.php/ajax_request_common/delete_event_multiple'
  1188. params = {
  1189. ids: eventId
  1190. }
  1191. } else {
  1192. url = '/integral.php/ajax_request_common/delete_event'
  1193. params = {
  1194. id: eventId
  1195. }
  1196. }
  1197. var self = this
  1198. this.$http('get',url,params)
  1199. .then(function(response) {
  1200. let message = ''
  1201. let status = 0
  1202. if (response.status == 200) {
  1203. var data = response.data
  1204. status = isNaN(data.status) ? 0 : parseInt(data.status)
  1205. switch (status) {
  1206. case 1:
  1207. message = '删除积分事件成功'
  1208. break
  1209. case -1:
  1210. message = '表单参数错误'
  1211. break
  1212. default:
  1213. message = data.info ? data.info : '删除积分事件失败'
  1214. }
  1215. } else {
  1216. message = '服务器出现问题'
  1217. }
  1218. self.$message({
  1219. message: message,
  1220. type: status == 1 ? 'success' : 'error'
  1221. })
  1222. if (status == 1) {
  1223. self.loadEventList()
  1224. }
  1225. })
  1226. .catch(function(error) {
  1227. console.log(error)
  1228. })
  1229. },
  1230. // 获取控件所需数据
  1231. loadWidgetData: function() {
  1232. var self = this
  1233. this.$http('get','/integral.php/ajax_request_common/prepare_integral_options',{id: this.profile.id,category_tree: 1,employee_list: 1})
  1234. .then(function(response) {
  1235. if (response.status == 200) {
  1236. var jsonData = response.data
  1237. try {
  1238. self.categoryTree = jsonData.category_tree
  1239. } catch (err) {
  1240. console.log(err)
  1241. }
  1242. }
  1243. })
  1244. .catch(function(error) {
  1245. console.log(error)
  1246. })
  1247. },
  1248. // 获取可录入积分对象的列表
  1249. loadTargetRange: function() {
  1250. var self = this
  1251. this.$http('get','/integral.php/ajax_request_common/load_target_range',{recorder_id: this.profile.id})
  1252. .then(function(response) {
  1253. if (response.status == 200) {
  1254. var jsonData = response.data
  1255. try {
  1256. self.employeeOptions = jsonData
  1257. } catch (err) {
  1258. console.log(err)
  1259. }
  1260. }
  1261. })
  1262. .catch(function(error) {
  1263. console.log(error)
  1264. })
  1265. },
  1266. // 获取管理者列表
  1267. loadEmployerList: function() {
  1268. var self = this
  1269. this.$http('get','/integral.php/ajax_request_common/prepare_integral_options',{id: this.profile.id,superior_list: 1})
  1270. .then(function(response) {
  1271. if (response.status == 200) {
  1272. var jsonData = response.data
  1273. try {
  1274. self.employerList = jsonData.reviewer_list
  1275. } catch (err) {
  1276. console.log(err)
  1277. }
  1278. }
  1279. })
  1280. .catch(function(error) {
  1281. console.log(error)
  1282. })
  1283. },
  1284. setDefaultValueForDialog: function() {
  1285. if (!this.newEventForm.event_time) {
  1286. this.newEventForm.event_time = new Date().getTime()
  1287. }
  1288. },
  1289. processDetailData: function(object) {
  1290. // 时间戳转换
  1291. object.event_time *= 1000
  1292. return object
  1293. },
  1294. updateItemSelection: function(item, checked) {
  1295. if (checked) {
  1296. const itemIds = this.selectedItems.map(x => x.id)
  1297. if (itemIds && (itemIds.length == 0 || itemIds.indexOf(item.id) < 0)) {
  1298. this.selectedItems.push(item)
  1299. }
  1300. } else {
  1301. this.selectedItems = this.selectedItems.filter(x => {
  1302. if (x.id != item.id) {
  1303. return x
  1304. }
  1305. })
  1306. }
  1307. },
  1308. removeItemSelection: function(itemId) {
  1309. const index = this.selectedItems.map(x => x.id).indexOf(itemId)
  1310. if (!isNaN(index) && index > -1) {
  1311. this.selectedItems.splice(index, 1)
  1312. const itemArray = this.itemSelectForm.items
  1313. for (let i = 0; i < itemArray.length; i++) {
  1314. if (itemArray[i].id == itemId) {
  1315. itemArray[i].checked = false
  1316. }
  1317. }
  1318. }
  1319. }
  1320. },
  1321. created() {
  1322. this.loadWidgetData()
  1323. this.loadTargetRange()
  1324. this.loadEmployerList()
  1325. this.loadPointType()
  1326. }
  1327. }
  1328. </script>
  1329. <style>
  1330. .msgCustomClass{
  1331. top: 50%;
  1332. margin-top: -23px;
  1333. }
  1334. .integral-create-review-btn .tpzs3 {
  1335. margin: 0 auto;
  1336. width: 40px;
  1337. height: 40px;
  1338. background-image: url(/images/jflr.png);
  1339. background-size: 100%;
  1340. }
  1341. .integral-create-review-btn .card-panel-description {
  1342. width: 100%;
  1343. text-align: center;
  1344. color: #666;
  1345. }
  1346. .integral-create-review-btn .card-panel-text {
  1347. line-height: 40px;
  1348. font-size: 20px;
  1349. font-weight: bold;
  1350. }
  1351. .integral-create-review-btn .card-panel-text2 {
  1352. font-size: 14px;
  1353. line-height: 20px;
  1354. color: rgba(102, 102, 102, 1);
  1355. }
  1356. .check-item-box .el-card__body {
  1357. padding: 0;
  1358. line-height: 1;
  1359. }
  1360. .integral-create-review-dialog .el-dialog__header {
  1361. display: none;
  1362. }
  1363. .integral-create-review-dialog .el-dialog__body {
  1364. padding-bottom: 0;
  1365. }
  1366. .integral-create-review-dialog .card-box-item .el-card__body {
  1367. padding: 5px 15px;
  1368. }
  1369. .diy-checkbox .el-checkbox__label{display: inline !important;}
  1370. </style>