Ddtails.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766
  1. <template>
  2. <ele-modal
  3. :before-close="cancel"
  4. :close-on-click-modal="false"
  5. :maxable="true"
  6. :title="title"
  7. :visible.sync="detailsVisible"
  8. append-to-body
  9. custom-class="ele-dialog-form task-report-dialog"
  10. width="75vw"
  11. >
  12. <el-form
  13. ref="form"
  14. :model="form"
  15. :rules="rules"
  16. label-position="right"
  17. label-width="110px"
  18. >
  19. <el-row>
  20. <headerTitle style="margin-top: 15px" title="报工信息"></headerTitle>
  21. <el-col :lg="12" :md="12" :sm="12" :xl="12" :xs="12">
  22. <el-form-item
  23. :rules="{
  24. required: true,
  25. message: '请选择实际开始时间',
  26. trigger: 'change'
  27. }"
  28. label="实际开始时间"
  29. prop="realStartTime"
  30. >
  31. <el-date-picker
  32. v-model="form.realStartTime"
  33. :disabled="inputDis"
  34. class="time_select"
  35. placeholder="选择实际开始时间"
  36. type="datetime"
  37. value-format="yyyy-MM-dd HH:mm:ss"
  38. @change="handleTimeChange"
  39. ></el-date-picker>
  40. </el-form-item>
  41. </el-col>
  42. <el-col :lg="12" :md="12" :sm="12" :xl="12" :xs="12">
  43. <el-form-item
  44. :rules="{
  45. required: true,
  46. message: '请选择实际结束时间',
  47. trigger: 'change'
  48. }"
  49. label="实际结束时间"
  50. prop="realEndTime"
  51. >
  52. <el-date-picker
  53. v-model="form.realEndTime"
  54. :disabled="inputDis"
  55. class="time_select"
  56. placeholder="选择实际结束时间"
  57. type="datetime"
  58. value-format="yyyy-MM-dd HH:mm:ss"
  59. @change="handleTimeChange"
  60. ></el-date-picker>
  61. </el-form-item>
  62. </el-col>
  63. <!-- <el-col :lg="12" :md="12" :sm="12" :xl="12" :xs="12">
  64. <el-form-item label="合格数量" prop="qualifiedQuantity">
  65. <el-input
  66. v-model.number="form.qualifiedQuantity"
  67. :disabled="inputDis"
  68. placeholder="请输入"
  69. type="number"
  70. @input="(e) => handleQuantityInput(e, 'qualifiedQuantity')"
  71. ></el-input>
  72. </el-form-item>
  73. </el-col> -->
  74. <!-- <el-col :lg="12" :md="12" :sm="12" :xl="12" :xs="12">
  75. <el-form-item label="不合格数量" prop="unqualifiedQuantity">
  76. <el-input
  77. v-model.number="form.unqualifiedQuantity"
  78. :disabled="inputDis"
  79. placeholder="请输入"
  80. type="number"
  81. @input="(e) => handleQuantityInput(e, 'unqualifiedQuantity')"
  82. ></el-input>
  83. </el-form-item>
  84. </el-col> -->
  85. <!-- <el-col :lg="12" :md="12" :sm="12" :xl="12" :xs="12">
  86. <el-form-item label="合格重量" prop="qualifiedWeight">
  87. <el-input
  88. v-model.number="form.qualifiedWeight"
  89. :disabled="inputDis"
  90. placeholder="请输入"
  91. type="number"
  92. @input="(e) => handleWeightInput(e, 'qualifiedWeight')"
  93. ></el-input>
  94. </el-form-item>
  95. </el-col> -->
  96. <!-- <el-col :lg="12" :md="12" :sm="12" :xl="12" :xs="12">
  97. <el-form-item label="不合格重量" prop="unqualifiedWeight">
  98. <el-input
  99. v-model.number="form.unqualifiedWeight"
  100. :disabled="inputDis"
  101. placeholder="请输入"
  102. type="number"
  103. @input="(e) => handleWeightInput(e, 'unqualifiedWeight')"
  104. ></el-input>
  105. </el-form-item>
  106. </el-col> -->
  107. <el-col :lg="12" :md="12" :sm="12" :xl="12" :xs="12">
  108. <el-form-item label="报工数" prop="reportQuantity">
  109. <el-input
  110. v-model.number="form.reportQuantity"
  111. :disabled="inputDis"
  112. placeholder="请输入"
  113. @input="(e) => handleQuantityInput(e, 'reportQuantity')"
  114. ></el-input>
  115. </el-form-item>
  116. </el-col>
  117. <el-col :lg="12" :md="12" :sm="12" :xl="12" :xs="12">
  118. <el-form-item label="损耗数" prop="lossQuantity">
  119. <el-input
  120. v-model.number="form.lossQuantity"
  121. :disabled="inputDis"
  122. placeholder="请输入"
  123. @input="(e) => handleQuantityInput(e, 'lossQuantity')"
  124. ></el-input>
  125. </el-form-item>
  126. </el-col>
  127. <el-col :span="24">
  128. <el-form-item label="备注信息">
  129. <el-input
  130. v-model="form.remark"
  131. :disabled="inputDis"
  132. :rows="2"
  133. placeholder="请输入"
  134. type="textarea"
  135. ></el-input>
  136. </el-form-item>
  137. </el-col>
  138. </el-row>
  139. <el-row class="tool_btn" v-if="!inputDis">
  140. <el-button
  141. type="primary"
  142. size="medium"
  143. @click="submitAdd"
  144. :loading="loadingBtn"
  145. >报工</el-button
  146. >
  147. </el-row>
  148. <headerTitle style="margin-top: 15px" title="工单信息"></headerTitle>
  149. <el-row :gutter="10" class="basic">
  150. <el-col
  151. v-for="item in fieldMap.orderList"
  152. :key="item.prop"
  153. :lg="8"
  154. :md="12"
  155. :sm="12"
  156. :xl="8"
  157. :xs="12"
  158. >
  159. <el-form-item :label="item.label" class="form80">
  160. <el-input v-model="current[item.prop]" disabled>
  161. <template slot="append" v-if="item.label == '要求生产数量:'">
  162. {{ current['measuringUnit'] }}
  163. </template>
  164. <template slot="append" v-if="item.label == '要求生产重量:'">
  165. {{ current['newWeightUnit'] }}
  166. </template>
  167. </el-input>
  168. </el-form-item>
  169. </el-col>
  170. </el-row>
  171. <headerTitle style="margin-top: 15px" title="任务信息"></headerTitle>
  172. <el-row :gutter="10" class="basic">
  173. <el-col
  174. v-for="item in fieldMap.taskList"
  175. :key="item.prop"
  176. :lg="8"
  177. :md="12"
  178. :sm="12"
  179. :xl="8"
  180. :xs="12"
  181. >
  182. <el-form-item :label="item.label" class="form80">
  183. <el-input v-model="current[item.prop]" disabled>
  184. <template slot="append" v-if="item.label == '任务数量:'">
  185. {{ current['measuringUnit'] }}
  186. </template>
  187. <template slot="append" v-if="item.label == '任务重量:'">
  188. {{ current['newWeightUnit'] }}
  189. </template>
  190. </el-input>
  191. </el-form-item>
  192. </el-col>
  193. </el-row>
  194. <el-row v-if="title === '详情'">
  195. <headerTitle style="margin-top: 15px" title="报工记录"></headerTitle>
  196. <ModifyRecord ref="ModifyRecordRef" :list="list" />
  197. </el-row>
  198. <div slot="footer" class="tool_btn">
  199. <el-button @click="cancel">关闭</el-button>
  200. </div>
  201. </el-form>
  202. </ele-modal>
  203. </template>
  204. <script>
  205. import {
  206. listWorkCenter,
  207. batchUpdateRealTime,
  208. listUpdateRealTimeRecord
  209. } from '@/api/workOrderList';
  210. import ModifyRecord from '@/views/taskList/components/ModifyRecord.vue';
  211. export default {
  212. components: {
  213. ModifyRecord
  214. },
  215. props: {
  216. currentRow: {
  217. type: Object,
  218. default: () => ({})
  219. }
  220. },
  221. data() {
  222. return {
  223. title: '详情',
  224. form: {
  225. realEndTime: '',
  226. realStartTime: '',
  227. unqualifiedWeight: '',
  228. unqualifiedQuantity: '',
  229. qualifiedWeight: '',
  230. qualifiedQuantity: '',
  231. remark: '',
  232. reportQuantity: '',
  233. lossQuantity: '',
  234. workOrderCode: '',
  235. workOrderId: '',
  236. taskId: ''
  237. },
  238. rules: {
  239. // qualifiedQuantity: [
  240. // {
  241. // required: true,
  242. // message: '请输入合格数量',
  243. // trigger: 'blur'
  244. // }
  245. // ],
  246. // qualifiedWeight: [
  247. // {
  248. // required: true,
  249. // message: '请输入合格重量',
  250. // trigger: 'blur'
  251. // }
  252. // ],
  253. // unqualifiedQuantity: [
  254. // {
  255. // required: true,
  256. // message: '请输入不合格数量',
  257. // trigger: 'blur'
  258. // }
  259. // ],
  260. // unqualifiedWeight: [
  261. // {
  262. // required: true,
  263. // message: '请输入不合格重量',
  264. // trigger: 'blur'
  265. // }
  266. // ]
  267. reportQuantity: [
  268. {
  269. required: true,
  270. message: '请输入报工数量',
  271. trigger: 'blur'
  272. }
  273. ],
  274. lossQuantity: [
  275. {
  276. required: true,
  277. message: '请输入损耗数量',
  278. trigger: 'blur'
  279. }
  280. ]
  281. },
  282. current: {},
  283. detailsVisible: false,
  284. fieldMap: {
  285. orderList: [
  286. { label: '计划批次号:', prop: 'batchNo' },
  287. { label: '工单编码:', prop: 'mesWorkOrderCode' },
  288. { label: '编码', prop: 'productCode' },
  289. { label: '名称', prop: 'productName' },
  290. { label: '规格', prop: 'specification' },
  291. { label: '生产订单编码:', prop: 'workOrderCode' },
  292. { label: '计划编号:', prop: 'productionPlanCode' },
  293. { label: '工艺路线:', prop: 'produceRoutingName' },
  294. { label: '要求生产数量:', prop: 'formingNum' },
  295. { label: '要求生产重量:', prop: 'formingWeight' },
  296. { label: '所属工厂:', prop: 'factoryName' },
  297. { label: '所属班组:', prop: 'assignTeamName' },
  298. { label: '计划开始时间:', prop: 'planStartTime' },
  299. { label: '计划结束时间:', prop: 'planCompleteTime' }
  300. ],
  301. taskList: [
  302. { label: '任务编码:', prop: 'assignCode' },
  303. { label: '工序名称:', prop: 'taskName' },
  304. { label: '执行类型:', prop: 'assigneeType' },
  305. { label: '执行对象名称:', prop: 'assigneeName' },
  306. { label: '工时:', prop: 'durationText' },
  307. { label: '任务开始时间:', prop: 'startTime' },
  308. { label: '任务结束时间:', prop: 'endTime' },
  309. { label: '任务数量:', prop: 'quantity' },
  310. { label: '任务重量:', prop: 'weight' }
  311. ]
  312. },
  313. loadingBtn: false,
  314. list: [],
  315. reportNum: '',
  316. lossNum: ''
  317. };
  318. },
  319. computed: {
  320. inputDis() {
  321. return this.title === '详情';
  322. }
  323. },
  324. methods: {
  325. open(type, row, form) {
  326. console.log(type, row, form, 'type, row, form');
  327. this.title = type === 'report' ? '报工' : '详情';
  328. this.detailsVisible = true;
  329. this.current = { ...row };
  330. if (form.realEndTime) {
  331. this.$nextTick(() => {
  332. this.form = { ...form };
  333. });
  334. if (type !== 'report') {
  335. listUpdateRealTimeRecord(row.apsAssigneeId)
  336. .then((res) => {
  337. if (res) {
  338. this.list = res;
  339. }
  340. })
  341. .catch((err) => {
  342. this.$message.error(err.message);
  343. });
  344. }
  345. }
  346. // 累计已报工、已损耗(来自任务行,勿用表单预填的本次可报剩余)
  347. this.reportNum = Number(this.current.reportQuantityReported) || 0;
  348. this.lossNum = Number(this.current.lossQuantityReported) || 0;
  349. this.getData();
  350. },
  351. cancel() {
  352. this.form = {
  353. realEndTime: '',
  354. realStartTime: '',
  355. unqualifiedWeight: '',
  356. unqualifiedQuantity: '',
  357. qualifiedWeight: '',
  358. qualifiedQuantity: '',
  359. remark: '',
  360. reportQuantity: '',
  361. lossQuantity: '',
  362. workOrderCode: '',
  363. workOrderId: '',
  364. taskId: ''
  365. };
  366. this.$refs.form.resetFields();
  367. this.detailsVisible = false;
  368. },
  369. async getData() {
  370. try {
  371. const res = await listWorkCenter(this.current.firstTaskId);
  372. this.$set(this.current, 'factoryName', res[0].factoryName);
  373. } catch (err) {
  374. this.$message.warning(err.message);
  375. }
  376. },
  377. // 时间选择
  378. handleTimeChange() {
  379. // 如果结束时间早于开始时间,清空结束时间
  380. // if (this.form.realStartTime && this.current.startTime) {
  381. // const realStartTime = new Date(this.form.realStartTime).getTime();
  382. // const realEndTime = new Date(this.current.startTime).getTime();
  383. // if (realStartTime < realEndTime) {
  384. // this.form.realStartTime = '';
  385. // this.$message.warning('实际开始时间不能早于任务开始时间');
  386. // }
  387. // }
  388. // if (this.form.realStartTime && this.form.realEndTime) {
  389. // const realStartTime = new Date(this.form.realStartTime).getTime();
  390. // const realEndTime = new Date(this.form.realEndTime).getTime();
  391. // if (realStartTime > realEndTime) {
  392. // this.form.realEndTime = '';
  393. // this.$message.warning('结束时间不能早于开始时间');
  394. // }
  395. // }
  396. },
  397. // 重量正则判断
  398. handleWeightInput(e, type) {
  399. // 过滤非数字和非小数点字符(包括负号)
  400. let value = e.replace(/[^\d.]/g, '');
  401. // 限制只能有一个小数点
  402. const dotCount = (value.match(/\./g) || []).length;
  403. if (dotCount > 1) {
  404. value = value.slice(0, value.lastIndexOf('.'));
  405. }
  406. // 限制不能以小数点开头
  407. if (value.startsWith('.')) {
  408. value = '0' + value;
  409. }
  410. // 更新绑定值
  411. this.form[type] = value;
  412. // this.calculateWeight(type);
  413. },
  414. //计算重量
  415. calculateWeight(type) {
  416. let total =
  417. this.form.qualifiedWeight - 0 + (this.form.unqualifiedWeight - 0);
  418. if (total > this.current.weight) {
  419. this.form[type] = 0;
  420. this.$message.warning('合格重量加不合格重量不能大于任务重量');
  421. }
  422. },
  423. // 计算数量:本次报工+本次损耗 不能超过 任务数量 - 已报工 - 已损耗
  424. calculateQuantity(type) {
  425. const req = Number(this.current.quantity) || 0;
  426. const done = this.add(this.reportNum, this.lossNum);
  427. const remaining = this.sub(req, done);
  428. const curRep = Number(this.form.reportQuantity) || 0;
  429. const curLoss = Number(this.form.lossQuantity) || 0;
  430. const curTotal = this.add(curRep, curLoss);
  431. if (curTotal > remaining) {
  432. this.form[type] = '';
  433. this.$message.warning(
  434. `本次报工数与损耗数之和不能超过任务剩余可报数量(剩余 ${remaining})`
  435. );
  436. }
  437. },
  438. getDecimalLength(num) {
  439. return (num.toString().split('.')[1] || '').length;
  440. },
  441. toInteger(num) {
  442. const len = this.getDecimalLength(num);
  443. return {
  444. int: Math.round(num * Math.pow(10, len)),
  445. factor: Math.pow(10, len)
  446. };
  447. },
  448. add(a, b) {
  449. const { int: aInt, factor: aFactor } = this.toInteger(a);
  450. const { int: bInt, factor: bFactor } = this.toInteger(b);
  451. const maxFactor = Math.max(aFactor, bFactor);
  452. return (
  453. (aInt * (maxFactor / aFactor) + bInt * (maxFactor / bFactor)) /
  454. maxFactor
  455. );
  456. },
  457. sub(a, b) {
  458. const { int: aInt, factor: aFactor } = this.toInteger(a);
  459. const { int: bInt, factor: bFactor } = this.toInteger(b);
  460. const maxFactor = Math.max(aFactor, bFactor);
  461. return (
  462. (aInt * (maxFactor / aFactor) - bInt * (maxFactor / bFactor)) /
  463. maxFactor
  464. );
  465. },
  466. // 数量正则 quantity
  467. handleQuantityInput(e, type) {
  468. // 过滤非数字字符(包括负号)
  469. // let value = e.replace(/[^\d]/g, '');
  470. // // 限制不能以 0 开头(除非是 0 本身)
  471. // if (value.startsWith('0') && value.length > 1) {
  472. // value = value.slice(1);
  473. // }
  474. let newVal = e.replace(/[^\d.]/g, '');
  475. if (newVal.startsWith('.')) {
  476. newVal = '';
  477. }
  478. const firstDotIndex = newVal.indexOf('.');
  479. if (firstDotIndex !== -1) {
  480. newVal =
  481. newVal.slice(0, firstDotIndex + 1) +
  482. newVal.slice(firstDotIndex + 1).replace(/\./g, '');
  483. }
  484. const match = newVal.match(/^(\d+)(\.\d{0,4})?/);
  485. // this.batchForm.quantity = match ? match[0] : '';
  486. // 更新绑定值
  487. this.form[type] = match ? match[0] : '';
  488. this.calculateQuantity(type);
  489. },
  490. submitAdd() {
  491. this.$refs.form.validate((valid) => {
  492. if (!valid) return;
  493. const req = Number(this.current.quantity) || 0;
  494. const done = this.add(this.reportNum, this.lossNum);
  495. const remaining = this.sub(req, done);
  496. const curRep = Number(this.form.reportQuantity) || 0;
  497. const curLoss = Number(this.form.lossQuantity) || 0;
  498. const curTotal = this.add(curRep, curLoss);
  499. if (curTotal > remaining) {
  500. return this.$message.warning(
  501. `本次报工数与损耗数之和不能超过任务剩余可报数量(剩余 ${remaining})`
  502. );
  503. }
  504. // if (
  505. // this.form.qualifiedQuantity -
  506. // 0 +
  507. // (this.form.unqualifiedQuantity - 0) !==
  508. // this.current.quantity
  509. // ) {
  510. // return this.$message.warning(
  511. // `合格数量加不合格数量要等于任务数量${this.current.quantity}`
  512. // );
  513. // }
  514. // if (
  515. // this.form.qualifiedWeight -
  516. // 0 +
  517. // (this.form.unqualifiedWeight - 0) !==
  518. // this.current.weight
  519. // ) {
  520. // return this.$message.warning(
  521. // `合格重量加不合格重量要等于任务重量${this.current.weight}`
  522. // );
  523. // }
  524. let data = {
  525. ...this.form,
  526. apsAssigneeId: this.current.apsAssigneeId
  527. };
  528. this.loadingBtn = true;
  529. batchUpdateRealTime([data])
  530. .then((res) => {
  531. this.loadingBtn = false;
  532. if (res) {
  533. this.$message.success('操作成功');
  534. this.cancel();
  535. this.$emit('success');
  536. }
  537. })
  538. .catch((err) => {
  539. this.loadingBtn = false;
  540. this.$message.error(err.message);
  541. });
  542. });
  543. }
  544. }
  545. };
  546. </script>
  547. <style scoped lang="scss">
  548. ::v-deep .task-report-dialog {
  549. overflow: hidden;
  550. border: 1px solid rgba(40, 120, 210, 0.28);
  551. border-radius: 6px;
  552. background: linear-gradient(180deg, #f7fbff 0%, #ffffff 34%, #f4f8fb 100%),
  553. #fff;
  554. box-shadow: 0 18px 50px rgba(15, 36, 61, 0.34);
  555. .el-dialog__header,
  556. .ele-modal__header {
  557. position: relative;
  558. min-height: 54px;
  559. padding: 0 22px;
  560. display: flex;
  561. align-items: center;
  562. border-bottom: 1px solid rgba(34, 112, 214, 0.22);
  563. background: linear-gradient(90deg, #102941 0%, #15446d 48%, #0f314e 100%),
  564. #102941;
  565. box-shadow: inset 0 -1px 0 rgba(63, 171, 255, 0.38);
  566. }
  567. .el-dialog__title,
  568. .ele-modal__title {
  569. color: #eef8ff;
  570. font-size: 17px;
  571. font-weight: 700;
  572. letter-spacing: 0;
  573. }
  574. .el-dialog__headerbtn,
  575. .ele-modal__headerbtn {
  576. top: 17px;
  577. .el-dialog__close,
  578. i {
  579. color: rgba(230, 246, 255, 0.78);
  580. }
  581. &:hover {
  582. .el-dialog__close,
  583. i {
  584. color: #40d9ff;
  585. }
  586. }
  587. }
  588. .el-dialog__body,
  589. .ele-modal__body {
  590. padding: 20px 24px 18px;
  591. background: linear-gradient(
  592. rgba(36, 122, 206, 0.055) 1px,
  593. transparent 1px
  594. ),
  595. linear-gradient(90deg, rgba(36, 122, 206, 0.045) 1px, transparent 1px),
  596. linear-gradient(180deg, #f7fbff 0%, #ffffff 46%, #f4f8fb 100%);
  597. background-size: 28px 28px, 28px 28px, 100% 100%;
  598. }
  599. .el-form {
  600. color: #26384a;
  601. }
  602. }
  603. ::v-deep .task-report-dialog .el-row {
  604. position: relative;
  605. }
  606. ::v-deep .task-report-dialog .basic {
  607. margin: 12px 0 8px !important;
  608. padding: 14px 14px 2px;
  609. border: 1px solid rgba(28, 118, 208, 0.18);
  610. border-radius: 6px;
  611. background: rgba(255, 255, 255, 0.78);
  612. box-shadow: inset 4px 0 0 rgba(35, 148, 255, 0.78),
  613. 0 8px 20px rgba(24, 58, 92, 0.06);
  614. }
  615. ::v-deep .task-report-dialog .el-form > .el-row:first-child {
  616. margin: 12px 0 8px;
  617. padding: 14px 14px 8px;
  618. border: 1px solid rgba(28, 118, 208, 0.22);
  619. border-radius: 6px;
  620. background: linear-gradient(
  621. 180deg,
  622. rgba(231, 244, 255, 0.88),
  623. rgba(255, 255, 255, 0.84)
  624. ),
  625. #fff;
  626. box-shadow: inset 4px 0 0 #2394ff, 0 8px 20px rgba(24, 58, 92, 0.08);
  627. }
  628. ::v-deep .task-report-dialog .el-form-item {
  629. margin-bottom: 18px;
  630. }
  631. ::v-deep .task-report-dialog .el-form-item__label {
  632. color: #526170;
  633. font-size: 14px;
  634. font-weight: 700;
  635. }
  636. ::v-deep .task-report-dialog .el-input__inner,
  637. ::v-deep .task-report-dialog .el-textarea__inner {
  638. border-color: #d6e1ec;
  639. border-radius: 4px;
  640. background: rgba(255, 255, 255, 0.94);
  641. color: #23384d;
  642. font-size: 14px;
  643. font-weight: 600;
  644. transition: border-color 0.2s ease, box-shadow 0.2s ease,
  645. background-color 0.2s ease;
  646. }
  647. ::v-deep .task-report-dialog .el-input__inner:hover,
  648. ::v-deep .task-report-dialog .el-textarea__inner:hover {
  649. border-color: #8fc8ff;
  650. }
  651. ::v-deep .task-report-dialog .el-input__inner:focus,
  652. ::v-deep .task-report-dialog .el-textarea__inner:focus {
  653. border-color: #2394ff;
  654. background: #fff;
  655. box-shadow: 0 0 0 3px rgba(35, 148, 255, 0.12);
  656. }
  657. ::v-deep .task-report-dialog .el-input.is-disabled .el-input__inner,
  658. ::v-deep .task-report-dialog .el-textarea.is-disabled .el-textarea__inner {
  659. border-color: #e1e8ef;
  660. background: #f4f7fa;
  661. color: #5d6975;
  662. -webkit-text-fill-color: #5d6975;
  663. }
  664. ::v-deep .task-report-dialog .el-input-group__append {
  665. border-color: #d6e1ec;
  666. background: #eef4fa;
  667. color: #657485;
  668. font-weight: 700;
  669. }
  670. ::v-deep
  671. .task-report-dialog
  672. .el-form-item.is-required:not(.is-no-asterisk)
  673. > .el-form-item__label:before {
  674. color: #ff5a5f;
  675. font-weight: 800;
  676. }
  677. ::v-deep .task-report-dialog .header-title,
  678. ::v-deep .task-report-dialog .headerTitle,
  679. ::v-deep .task-report-dialog .header_title {
  680. margin-top: 22px !important;
  681. }
  682. ::v-deep .time_select {
  683. width: 100%;
  684. }
  685. ::v-deep .task-report-dialog .tool_btn {
  686. margin: 8px 0 18px;
  687. text-align: right;
  688. .el-button {
  689. min-width: 92px;
  690. padding: 11px 24px !important;
  691. border-radius: 4px;
  692. font-size: 15px !important;
  693. font-weight: 700;
  694. }
  695. .el-button--primary {
  696. border-color: #1d8fff;
  697. background: linear-gradient(135deg, #1597ff 0%, #006fd6 100%);
  698. box-shadow: 0 8px 18px rgba(0, 122, 218, 0.28);
  699. &:hover,
  700. &:focus {
  701. border-color: #35b9ff;
  702. background: linear-gradient(135deg, #35b9ff 0%, #087ee8 100%);
  703. }
  704. }
  705. }
  706. @media (max-width: 1366px) {
  707. ::v-deep .task-report-dialog {
  708. width: 86vw !important;
  709. }
  710. }
  711. @media (max-width: 768px) {
  712. ::v-deep .task-report-dialog {
  713. width: 94vw !important;
  714. .el-dialog__body,
  715. .ele-modal__body {
  716. padding: 16px 14px;
  717. }
  718. }
  719. ::v-deep .task-report-dialog .basic,
  720. ::v-deep .task-report-dialog .el-form > .el-row:first-child {
  721. padding: 12px 10px 2px;
  722. }
  723. }
  724. </style>