prescriptionBox.vue 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833
  1. <template>
  2. <!-- 专家处方 -->
  3. <div class="work-item" :class="{ dark: progress === 0 && ROLETYPE != '3' }">
  4. <div class="work-line">
  5. <div class="line-box">
  6. <div class="line-dotted">
  7. <div class="dotted-inset"></div>
  8. </div>
  9. </div>
  10. </div>
  11. <div class="work-info">
  12. <img v-if="progress === 0 && ROLETYPE == '3'" class="todo-img" src="@/assets/img/gallery/todo.png" />
  13. <img v-if="progress !== 0" class="done-img" src="@/assets/img/gallery/done.png" />
  14. <div class="card-item-title"><span class="dotted"></span>专家处方</div>
  15. <div class="prescription-box">
  16. <div class="step-box">
  17. <step-box :orderStatus="infoItem.orderStatus" v-if="infoItem.orderStatus || infoItem.orderStatus === 0"></step-box>
  18. </div>
  19. <!-- <div class="blur-bg">
  20. <div class="lock-btn">解锁智能处方</div>
  21. </div> -->
  22. <div class="work-info-conetnt">
  23. <div class="info-item">
  24. <div class="info-name">农事编号</div>
  25. <div class="info-value">{{ infoItem.orderId }}</div>
  26. </div>
  27. <div class="info-item">
  28. <div class="info-name">服务亩数</div>
  29. <div class="info-value">{{ infoItem.area }}亩</div>
  30. </div>
  31. <div class="info-item">
  32. <div class="info-name">服务区域</div>
  33. <div class="info-value">{{ infoItem.serviceRegion }}</div>
  34. </div>
  35. <div v-if="progress === 0 && ROLETYPE == '3'">
  36. <div class="info-item">
  37. <div class="info-name">触发条件</div>
  38. <div class="info-value">
  39. {{ infoItem.condition }}
  40. <div class="select-value">
  41. <el-select v-model="infoItem.condition" placeholder="请选择" style="width: 80px">
  42. <el-option v-for="num in 9" :key="num" :value="20 + (num - 1) * 5 + '%'">
  43. {{ 20 + (num - 1) * 5 }}%
  44. </el-option>
  45. </el-select>
  46. </div>
  47. </div>
  48. </div>
  49. <div class="info-item time-picker">
  50. <div class="info-name">执行时间</div>
  51. <div class="info-value">
  52. <el-date-picker
  53. style="width: 150px"
  54. value-format="YYYY-MM-DD"
  55. v-model="infoItem.executeDate"
  56. type="date"
  57. :clearable="false"
  58. class="date-info"
  59. placeholder="选择日期"
  60. />
  61. </div>
  62. </div>
  63. </div>
  64. <div v-else>
  65. <div class="info-item">
  66. <div class="info-name">触发条件</div>
  67. <div class="info-value">{{ infoItem.farmWorkLibName }}</div>
  68. </div>
  69. <div class="info-item">
  70. <div class="info-name">执行时间</div>
  71. <div class="info-value">{{ infoItem.executeDate }}</div>
  72. </div>
  73. </div>
  74. <!-- <div class="info-item">
  75. <li class="info-name">执行时间</li>
  76. <div class="info-value primary-color">2025.01.12</div>
  77. </div> -->
  78. </div>
  79. <div class="desc">
  80. {{ prescriptioData.expertPrescription || prescriptioData.weatherWarningMsg }}
  81. </div>
  82. <div class="prescription-item" v-if="progress === 0 && ROLETYPE == '3' && !allPesticideFertilizerListsEmpty">
  83. <div class="usageMode-wrap">
  84. <div class="box-item">
  85. <div class="form-l">施用方式</div>
  86. <div class="form-r">
  87. <el-select
  88. v-model="dynamicValidateForm.usageMode"
  89. placeholder="请选择"
  90. style="width: 152px"
  91. >
  92. <el-option
  93. v-for="(usage, uId) in allUsageModeList"
  94. :key="uId"
  95. :label="usage"
  96. :value="usage"
  97. />
  98. </el-select>
  99. </div>
  100. </div>
  101. </div>
  102. <el-form ref="formRef" style="max-width: 600px" :model="dynamicValidateForm" class="demo-dynamic">
  103. <div
  104. v-for="(prescriptionItem, prescriptionI) in dynamicValidateForm.prescriptionList"
  105. :key="prescriptionI"
  106. >
  107. <div class="recipe-box">
  108. <div class="recipe-title">
  109. <div class="recipe-name">{{ prescriptionItem.name }}处方</div>
  110. <div class="recipe-btn" @click="addDomain(prescriptionI)">
  111. <el-icon><Plus /></el-icon>新增药物
  112. </div>
  113. </div>
  114. <div class="recipe-item">
  115. <div class="recipe-form">
  116. <el-form-item
  117. v-for="(domain, index) in prescriptionItem.pesticideFertilizerList"
  118. :key="domain.key"
  119. :prop="'domains.' + index + '.value'"
  120. >
  121. <div class="form-box">
  122. <div class="form-index">{{ formatIndex(index) }}</div>
  123. <div class="box-item" v-if="domain.typeName">
  124. <div class="form-l">使用功效</div>
  125. <div class="form-r r-text">
  126. {{ domain.typeName }}
  127. <!-- <el-select
  128. v-model="domain.typeName"
  129. placeholder="请选择"
  130. style="width: 140px"
  131. >
  132. <el-option :label="domain.typeName" :value="domain.typeName" />
  133. </el-select> -->
  134. </div>
  135. </div>
  136. <div class="box-item">
  137. <div class="form-l">肥药名称</div>
  138. <div class="form-r">
  139. <el-select
  140. @change="
  141. handlePesticideFertilizerChange(prescriptionI, index)
  142. "
  143. v-model="domain.pesticideFertilizerId"
  144. placeholder="请选择"
  145. style="width: 140px"
  146. >
  147. <el-option
  148. v-for="item in pesticideFertilizersOptions"
  149. :key="item.id"
  150. :label="item.defaultName"
  151. :value="item.id"
  152. />
  153. </el-select>
  154. </div>
  155. </div>
  156. <div class="form-title">人工方式</div>
  157. <div class="box-item sub-item">
  158. <div class="form-l has-sub">
  159. <div class="main-name">肥药配比</div>
  160. <div class="sub-name">(药剂:兑水量)</div>
  161. </div>
  162. <div class="form-r input-box text-center">
  163. <el-input
  164. v-model="domain.ratio"
  165. style="width: 140px"
  166. placeholder="请输入"
  167. />
  168. <!-- <el-select
  169. v-model="domain.value3"
  170. placeholder="请选择"
  171. style="width: 140px"
  172. >
  173. <el-option label="1ml:5000ml" value="1" />
  174. <el-option label="1ml:10000ml" value="3" />
  175. </el-select> -->
  176. </div>
  177. </div>
  178. <div class="box-item sub-item">
  179. <div class="form-l has-sub">
  180. <div class="main-name">单亩用量</div>
  181. <div class="sub-name">(亩数:药剂)</div>
  182. </div>
  183. <div class="form-r input-box text-center">
  184. <el-input
  185. v-model="domain.muUsage"
  186. style="width: 140px"
  187. placeholder="请输入"
  188. />
  189. <!-- <el-select
  190. v-model="domain.value5"
  191. placeholder="请选择"
  192. style="width: 140px"
  193. >
  194. <el-option label="1:5000ml" value="1" />
  195. <el-option label="1:10000ml" value="3" />
  196. </el-select> -->
  197. </div>
  198. </div>
  199. <div v-if="dynamicValidateForm.usageMode === '叶面施'">
  200. <div class="form-title">无人机方式</div>
  201. <div class="box-item sub-item">
  202. <div class="form-l has-sub">
  203. <div class="main-name">肥药配比</div>
  204. <div class="sub-name">(药剂:兑水量)</div>
  205. </div>
  206. <div class="form-r input-box text-center">
  207. <el-input
  208. v-model="domain.muUsage2"
  209. style="width: 140px"
  210. placeholder="请输入"
  211. />
  212. <!-- <el-select
  213. v-model="domain.value6"
  214. placeholder="请选择"
  215. style="width: 140px"
  216. >
  217. <el-option label="1ml:5000ml" value="1" />
  218. <el-option label="1ml:10000ml" value="3" />
  219. </el-select> -->
  220. </div>
  221. </div>
  222. <div class="box-item sub-item">
  223. <div class="form-l has-sub">
  224. <div class="main-name">单亩用量</div>
  225. <div class="sub-name">(亩数:药剂)</div>
  226. </div>
  227. <div class="form-r input-box text-center">
  228. <el-input
  229. v-model="domain.ratio2"
  230. style="width: 140px"
  231. placeholder="请输入"
  232. />
  233. </div>
  234. </div>
  235. </div>
  236. <div class="input-box">
  237. <el-input
  238. v-model="domain.remark"
  239. style="width: 100%"
  240. placeholder="备注:用药注意事项"
  241. />
  242. </div>
  243. <div class="action-btn">
  244. <el-button
  245. class="btn delete-btn"
  246. @click.prevent="removeDomain(prescriptionI, domain)"
  247. >
  248. 删除
  249. </el-button>
  250. <el-button
  251. type="primary"
  252. class="btn"
  253. @click.prevent="resetItemForm(prescriptionI, index)"
  254. >
  255. 重置
  256. </el-button>
  257. </div>
  258. </div>
  259. </el-form-item>
  260. </div>
  261. </div>
  262. </div>
  263. </div>
  264. </el-form>
  265. </div>
  266. <div class="prescription-item" v-else v-show="!allPesticideFertilizerListsEmpty">
  267. <div class="sub-title">
  268. <div class="sub-name">药物处方</div>
  269. </div>
  270. <div class="use-mode">施用方式:<span>{{ prescriptioData.usageMode }}</span></div>
  271. <div v-if="workType">
  272. <div class="new-wrap">
  273. <div class="new-title">
  274. <div class="title-1"><div class="table-name">使用功效</div></div>
  275. <div class="title-2"><div class="table-name">肥药名称</div></div>
  276. <div class="title-3"><div class="table-name">执行方式</div></div>
  277. <div class="title-4"><div class="table-name">药肥配比</div></div>
  278. <div class="title-5"><div class="table-name">单亩用量</div></div>
  279. </div>
  280. <div
  281. class="new-table-wrap"
  282. v-for="(prescriptionItem, prescriptionI) in prescriptioData.prescriptionList"
  283. :key="prescriptionI"
  284. >
  285. <div
  286. class="new-prescription"
  287. v-for="(subP, subI) in prescriptionItem.pesticideFertilizerList"
  288. :key="subI"
  289. >
  290. <div class="new-table">
  291. <div class="line-l">
  292. <div class="line-1 title-1">{{ subP.typeName }}</div>
  293. <div class="line-2">{{ subP.defaultName }}</div>
  294. </div>
  295. <div class="line-r" :class="{'has-border': prescriptioData.usageMode === '叶面施'}">
  296. <div class="line-3">
  297. <div class="sub-line title-3" :class="{'execute-line': prescriptioData.usageMode === '叶面施'}">人工</div>
  298. <div class="sub-line title-4">{{ subP.ratio }}</div>
  299. <div class="sub-line title-5">{{ subP.muUsage }}</div>
  300. </div>
  301. <div class="line-4" v-if="prescriptioData.usageMode === '叶面施'">
  302. <div class="sub-line title-3 execute-line">无人机</div>
  303. <div class="sub-line title-4">{{ subP.ratio2 ? subP.ratio2 : "---" }}</div>
  304. <div class="sub-line title-5">{{ subP.muUsage2 ? subP.muUsage2 : "---" }}</div>
  305. </div>
  306. </div>
  307. </div>
  308. <div class="note-text" v-if="subP.remark">{{ subP.remark }}</div>
  309. </div>
  310. <!-- <div class="prescription-result" :class="{ 'has-wrap': workType }">
  311. <div class="result-index">0{{ index + 1 }}</div>
  312. <div class="result-title">
  313. <div class="title-item">
  314. <div class="name">功效:</div>
  315. <div class="value">{{ item.typeName }}</div>
  316. </div>
  317. <div class="title-item">
  318. <div class="name">名称:</div>
  319. <div class="value">{{ item.defaultName }}</div>
  320. </div>
  321. </div>
  322. <div>
  323. <el-table
  324. :data="handleTableData(item)"
  325. style="width: 100%"
  326. :header-cell-style="{ background: '#F5F5F5' }"
  327. >
  328. <el-table-column label="" width="50">
  329. <template #default="scope">
  330. <div class="table-l-title">
  331. {{ scope.row.executeStyle == 1 ? "人工" : "无人机" }}
  332. </div>
  333. </template>
  334. </el-table-column>
  335. <el-table-column label="配比" width="56">
  336. <template #default="scope">
  337. {{ scope.row.ratio ? scope.row.ratio + scope.row.unit : "---" }}
  338. </template>
  339. </el-table-column>
  340. <el-table-column prop="muUsage" label="单亩用量">
  341. <template #default="scope">
  342. {{ scope.row.muUsage ? scope.row.muUsage + scope.row.unit : "---" }}
  343. </template>
  344. </el-table-column>
  345. </el-table>
  346. </div>
  347. <div class="remark-text">备注:{{ item.remark }}</div>
  348. </div> -->
  349. </div>
  350. </div>
  351. </div>
  352. <div v-else class="item-table has-sub-title no-wrap-table">
  353. <div class="prescription-result">
  354. <el-table
  355. :data="prescriptioData.pesticideFertilizers"
  356. style="width: 100%"
  357. :header-cell-style="{ background: '#F5F5F5' }"
  358. >
  359. <el-table-column prop="typeName" label="功效" width="42" />
  360. <el-table-column prop="defaultName" label="名称" />
  361. <el-table-column label="配比" width="52">
  362. <template #default="scope">
  363. {{ scope.row.ratio ? scope.row.ratio + scope.row.unit : "---" }}
  364. </template>
  365. </el-table-column>
  366. <el-table-column prop="muUsage" label="单亩用量" width="42">
  367. <template #default="scope">
  368. {{ scope.row.muUsage ? scope.row.muUsage + scope.row.unit : "---" }}
  369. </template>
  370. </el-table-column>
  371. <el-table-column label="执行方式" width="40">
  372. <template #default="scope">
  373. <div class="table-l-title">
  374. {{ scope.row.executeStyle == 1 ? "人工" : "人工" }}
  375. </div>
  376. </template>
  377. </el-table-column>
  378. </el-table>
  379. </div>
  380. </div>
  381. </div>
  382. <div class="prescription-item">
  383. <div class="sub-title">
  384. <div class="sub-line"></div>
  385. <div class="sub-name">执行农事区域</div>
  386. <div class="sub-line"></div>
  387. </div>
  388. <div class="prescription-chart prescription-map" v-if="infoItem?.executeBlueZones">
  389. <execute-blue-region
  390. :executeBlueZones="infoItem?.executeBlueZones"
  391. :farmId="infoItem.farmId"
  392. :regionId="infoItem.regionId"
  393. ></execute-blue-region>
  394. </div>
  395. </div>
  396. <div class="prescription-item" v-if="progress === 0">
  397. <div class="sub-title">
  398. <div class="sub-line"></div>
  399. <div class="sub-name">指标动态</div>
  400. <div class="sub-line"></div>
  401. </div>
  402. <div class="prescription-chart">
  403. <chart
  404. :key="1"
  405. type="feature"
  406. :indexName="infoItem.indexName"
  407. :chartJson="prescriptioData.indexJson"
  408. ></chart>
  409. </div>
  410. </div>
  411. <div class="prescription-item action-btn" v-if="progress === 0 && ROLETYPE == '3'">
  412. <el-button class="btn" type="danger" plain @click="remove()">删除</el-button>
  413. <el-button class="btn" type="primary" @click="submitForm(formRef)">确认下发</el-button>
  414. </div>
  415. </div>
  416. </div>
  417. </div>
  418. </template>
  419. <script setup>
  420. import eventBus from "@/api/eventBus";
  421. import chart from "./chart.vue";
  422. import { computed, onMounted, reactive, ref } from "vue";
  423. import { ElMessage, ElMessageBox } from "element-plus";
  424. import { useStore } from "vuex";
  425. import ExecuteBlueRegion from "./executeBlueRegion";
  426. import stepBox from "@/components/common/stepBox.vue";
  427. import { useRouter } from "vue-router";
  428. const router = useRouter();
  429. const props = defineProps({
  430. progress: {
  431. type: Number,
  432. required: true,
  433. },
  434. prescriptioData: {
  435. type: Object,
  436. },
  437. });
  438. const infoItem = ref({});
  439. const store = useStore();
  440. const ROLETYPE = store.state.app.curRole;
  441. // 农事类型--区分表格显示字段等
  442. const workType = ref(true);
  443. let pesticideFertilizersOptions = ref([
  444. {
  445. id: "null",
  446. name: "芸苔素内酯 15000倍",
  447. typeName: "30",
  448. defaultRatio: null,
  449. defaultDroneRatio: null,
  450. unit: 0,
  451. defaultName: "调节",
  452. },
  453. ]);
  454. VE_API.order.pesticideFertilizers().then(({ data }) => {
  455. pesticideFertilizersOptions.value = data;
  456. });
  457. onMounted(() => {
  458. dynamicValidateForm.usageMode = props.prescriptioData.usageMode;
  459. dynamicValidateForm.prescriptionList = props.prescriptioData.prescriptionList.map((item) => ({ ...item }));
  460. // submit()
  461. infoItem.value = props.prescriptioData;
  462. });
  463. const allPesticideFertilizerListsEmpty = computed(() => {
  464. // prescriptioData.prescriptionList[0].pesticideFertilizerList
  465. // 遍历 prescriptionList 数组
  466. return props.prescriptioData.prescriptionList.every((item) => {
  467. // 检查 pesticideFertilizerList 是否为空数组或每个对象都为空
  468. return (
  469. !item.pesticideFertilizerList.length ||
  470. item.pesticideFertilizerList.every(
  471. (subItem) =>
  472. // 假设每个子对象需要某种条件来判断是否为空,这里假设对象没有属性即为空
  473. Object.keys(subItem).length === 0
  474. )
  475. );
  476. });
  477. });
  478. // 表单
  479. const formRef = ref();
  480. const dynamicValidateForm = reactive({
  481. name: "",
  482. conditionRate: "",
  483. executeDate: "",
  484. usageMode: "",
  485. prescriptionList: [
  486. {
  487. name: "",
  488. pesticideFertilizerList: [
  489. {
  490. key: 1,
  491. typeName: "",
  492. muUsage: "",
  493. muUsage2: "",
  494. ratio: "",
  495. ratio2: "",
  496. remark: "",
  497. },
  498. ],
  499. },
  500. ],
  501. });
  502. const addDomain = (parentIndex) => {
  503. dynamicValidateForm.prescriptionList[parentIndex].pesticideFertilizerList.unshift({
  504. key: Date.now(),
  505. muUsage: "",
  506. muUsage2: "",
  507. ratio: "",
  508. ratio2: "",
  509. remark: "",
  510. });
  511. };
  512. const removeDomain = (parentIndex, item) => {
  513. const index = dynamicValidateForm.prescriptionList[parentIndex].pesticideFertilizerList.indexOf(item);
  514. if (index !== -1) {
  515. dynamicValidateForm.prescriptionList[parentIndex].pesticideFertilizerList.splice(index, 1);
  516. }
  517. };
  518. const resetItemForm = (parentIndex, index) => {
  519. dynamicValidateForm.prescriptionList[parentIndex].pesticideFertilizerList[index] = {
  520. typeName: "",
  521. muUsage: "",
  522. muUsage2: "",
  523. ratio: "",
  524. ratio2: "",
  525. remark: "",
  526. };
  527. };
  528. const allUsageMode = ref(null);
  529. const allUsageModeList = ["叶面施", "根部施"];
  530. /**
  531. * 选择药肥的时候修改订单中药肥pesticideFertilizerId 以外其他数据
  532. * @param index
  533. */
  534. const handlePesticideFertilizerChange = (parentIndex, index) => {
  535. let obj = pesticideFertilizersOptions.value.filter(
  536. (item) =>
  537. dynamicValidateForm.prescriptionList[parentIndex].pesticideFertilizerList[index].pesticideFertilizerId ===
  538. item.id
  539. )[0];
  540. dynamicValidateForm.prescriptionList[parentIndex].pesticideFertilizerList[index] = {
  541. ...dynamicValidateForm.prescriptionList[parentIndex].pesticideFertilizerList[index],
  542. typeName: obj.typeName,
  543. unit: obj.unit,
  544. defaultRatio: obj.defaultRatio,
  545. usageModeList: obj.usageModeList,
  546. ratio: obj.defaultRatio,
  547. defaultName: obj.defaultName,
  548. pesticideFertilizerName: obj.name,
  549. pesticideFertilizerCode: obj.pesticideFertilizerCode,
  550. };
  551. };
  552. const submitForm = (formEl) => {
  553. if (!formEl) return;
  554. formEl.validate((valid) => {
  555. if (valid) {
  556. submit();
  557. } else {
  558. console.log("error submit!");
  559. }
  560. });
  561. };
  562. const submit = () => {
  563. // const executeBlueZones = newFarmMap.getSelectedBlueRegion();
  564. // if (!executeBlueZones || !executeBlueZones.length) {
  565. // ElMessage({
  566. // message: "请选择执行区域",
  567. // type: "warning",
  568. // });
  569. // return false
  570. // }
  571. // 检查药物所有项是否都包含特定的字段
  572. const hasRequiredFields = dynamicValidateForm.prescriptionList.every((item) => {
  573. return item.pesticideFertilizerList.every((domain) => {
  574. const hasPesticideFertilizerCode = "pesticideFertilizerCode" in domain;
  575. const hasMuUsage = "muUsage" in domain;
  576. const hasRatio = "ratio" in domain;
  577. const isMuUsageValid = domain.muUsage !== "";
  578. const isRatioValid = domain.ratio ? true : false;
  579. return hasPesticideFertilizerCode && hasMuUsage && hasRatio && isMuUsageValid && isRatioValid;
  580. });
  581. });
  582. if (!hasRequiredFields) {
  583. ElMessage({
  584. message: "请完善药物信息",
  585. type: "warning",
  586. });
  587. return false;
  588. }
  589. const data = {
  590. ...infoItem.value,
  591. ...dynamicValidateForm,
  592. // prescription: flattenedDomains,
  593. orderStatus: 1,
  594. // weatherWarningMsg: warningMsg.value,
  595. // allUsageMode: allUsageMode.value,
  596. };
  597. VE_API.order.confirm(data).then(({ code }) => {
  598. if (code === 0) {
  599. ElMessage({
  600. message: "下发处方成功",
  601. type: "success",
  602. });
  603. setTimeout(() => {
  604. eventBus.emit("discover:submitForm");
  605. // window.location.reload();
  606. }, 500);
  607. }
  608. });
  609. };
  610. const formatIndex = (index) => {
  611. return String(index + 1).padStart(2, "0");
  612. };
  613. const handleTableData = (item) => {
  614. return [
  615. {
  616. typeName: item.typeName,
  617. defaultName: item.defaultName,
  618. executeStyle: 1,
  619. ratio: item.ratio || item.defaultRatio,
  620. usageMode: item.usageMode,
  621. muUsage: item.muUsage,
  622. unit: item.unit,
  623. },
  624. {
  625. typeName: item.typeName,
  626. defaultName: item.defaultName,
  627. executeStyle: 2,
  628. ratio: item.ratio2,
  629. usageMode: "---",
  630. muUsage: item.muUsage2,
  631. unit: item.unit,
  632. },
  633. ];
  634. };
  635. const remove = () => {
  636. ElMessageBox.confirm("是否要删除这个农事?", "警告", {
  637. confirmButtonText: "删除",
  638. cancelButtonText: "取消",
  639. type: "warning",
  640. }).then(() => {
  641. VE_API.farm.deleteFarmWork({ libId: infoItem.value.farmWorkLibId }).then(({ code }) => {
  642. if (code === 0) {
  643. ElMessage({
  644. type: "success",
  645. message: "删除成功!",
  646. });
  647. setTimeout(() => {
  648. // router.go(-1);
  649. router.replace("/expert_album?reload=true");
  650. }, 500);
  651. }
  652. });
  653. });
  654. };
  655. </script>
  656. <style lang="scss" scoped>
  657. @import "./boxClass.scss";
  658. .recipe-box {
  659. .recipe-title {
  660. display: flex;
  661. align-items: center;
  662. justify-content: space-between;
  663. .recipe-name {
  664. color: #000000;
  665. font-size: 14px;
  666. }
  667. .recipe-btn {
  668. font-size: 12px;
  669. color: #2199f8;
  670. }
  671. }
  672. }
  673. .prescription-result {
  674. position: relative;
  675. // border: 0.5px solid #444444;
  676. // border-radius: 4px;
  677. // padding: 8px 10px 10px 10px;
  678. &.has-wrap {
  679. border: 0.5px solid #444444;
  680. border-radius: 4px;
  681. padding: 8px 10px 10px 10px;
  682. }
  683. .result-index {
  684. position: absolute;
  685. left: -1px;
  686. top: -1px;
  687. padding: 0 8px;
  688. background: #2199f8;
  689. color: #fff;
  690. font-size: 12px;
  691. border-radius: 4px 0 4px 0;
  692. }
  693. .result-title {
  694. display: flex;
  695. justify-content: center;
  696. align-items: center;
  697. padding-bottom: 8px;
  698. .title-item {
  699. display: flex;
  700. align-items: center;
  701. .name {
  702. color: rgba(33, 153, 248, 0.85);
  703. }
  704. .value {
  705. color: rgba(0, 0, 0, 0.4);
  706. }
  707. }
  708. .title-item + .title-item {
  709. padding-left: 16px;
  710. }
  711. }
  712. }
  713. .use-mode {
  714. color: rgba(0, 0, 0, 0.4);
  715. padding: 2px 0 8px 0;
  716. span {
  717. color: #2199f8;
  718. }
  719. }
  720. .new-wrap {
  721. border-radius: 5px;
  722. text-align: center;
  723. border: 1px solid #444444;
  724. .new-title {
  725. background: #e0f2ff;
  726. border-radius: 5px 5px 0 0;
  727. border-bottom: 1px solid #444444;
  728. display: flex;
  729. color: rgba(33, 153, 248, 0.85);
  730. // justify-content: space-around;
  731. padding: 5px 6px;
  732. font-size: 12px;
  733. .table-name {
  734. width: 24px;
  735. font-size: 12px;
  736. margin: 0 auto;
  737. }
  738. }
  739. .title-1 {
  740. width: 46px;
  741. }
  742. .title-2 {
  743. flex: 1;
  744. }
  745. .title-3 {
  746. width: 52px;
  747. }
  748. .title-4 {
  749. width: 56px;
  750. }
  751. .title-5 {
  752. width: 52px;
  753. }
  754. .new-table-wrap {
  755. padding: 5px;
  756. .new-prescription {
  757. .new-table {
  758. display: flex;
  759. align-items: center;
  760. border: 1px solid #444444;
  761. background: #fff;
  762. border-radius: 5px;
  763. color: rgba(0, 0, 0, 0.4);
  764. font-size: 11px;
  765. .line-l {
  766. display: flex;
  767. flex: 1;
  768. .line-2 {
  769. flex: 1;
  770. padding: 0 2px;
  771. }
  772. }
  773. .line-r {
  774. &.has-border {
  775. border-left: 1px solid #444444;
  776. }
  777. .line-3 {
  778. display: flex;
  779. align-items: center;
  780. }
  781. .sub-line {
  782. padding: 10px 0;
  783. }
  784. .line-4 {
  785. display: flex;
  786. align-items: center;
  787. border-top: 1px solid #444444;
  788. }
  789. .execute-line {
  790. border-right: 1px solid #444444;
  791. }
  792. }
  793. }
  794. .note-text {
  795. margin: 8px 0 4px 0;
  796. color: rgba(0, 0, 0, 0.4);
  797. background: #fff;
  798. padding: 6px 8px;
  799. border-radius: 5px;
  800. text-align: left;
  801. font-size: 11px;
  802. }
  803. }
  804. .new-prescription + .new-prescription {
  805. padding-top: 8px;
  806. }
  807. }
  808. }
  809. </style>