newEdit.vue 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819
  1. <template>
  2. <div>
  3. <Toptitle :title="type==1?'新增':type==2?'编辑':'详情'">
  4. <Button @click="$router.go(-1)" style="margin-right:10px">取消</Button>
  5. <Button type='error' style="margin-right:10px" @click="handleDel">强制删除</Button>
  6. <Button @click="handleTakeApart" style="margin-right:10px" type='primary' v-show="type==2">批量拆单</Button>
  7. <Upload
  8. ref="upload"
  9. name="your_file"
  10. :show-upload-list="false"
  11. :headers="headers"
  12. :on-error="uploadError"
  13. :on-success="uploadSuccess"
  14. :action="$store.state.ip + '/api/split_import_news'"
  15. :data='{list:JSON.stringify(selectData)}'
  16. v-show="false"
  17. >
  18. </Upload>
  19. <Button @click="handleExport" type="primary" v-if="type==3" style="margin-right:10px">批量下生产</Button>
  20. <Button type="primary" @click="handleSubmit('formValidate')" v-if="type!=3">保存</Button>
  21. </Toptitle>
  22. <Form ref="formValidate" :model="formData" :rules="ruleValidate" class="form_content" :label-width='120'>
  23. <FormItem label='项目编号:' prop='order_no'>
  24. <Input clearable v-model="formData.order_no" class="form_item" placeholder="请输入项目编码" disabled/>
  25. </FormItem>
  26. <FormItem label='项目名称:' prop='residential_name'>
  27. <Input v-model="formData.residential_name" clearable class="form_item" placeholder="请输入项目名称" :disabled='type==3'/>
  28. </FormItem>
  29. <FormItem label="项目简称:" prop='abbreviation'>
  30. <Input v-model="formData.abbreviation" clearable class="form_item" placeholder="请输入项目简称" :disabled='type==3'/>
  31. </FormItem>
  32. <FormItem label="客户:" prop='custom_id'>
  33. <Select v-model="formData.custom_id" clearable class="form_item" :disabled='type==3'>
  34. <Option v-for="item in customList" :key="item.id" :value="item.id" :label="item.nickname" :disabled='type==3'/>
  35. </Select>
  36. </FormItem>
  37. <FormItem label="紧急程度:" prop='warning_state'>
  38. <Select v-model="formData.warning_state" clearable filterable class="form_item" :disabled='type==3'>
  39. <Option v-for="item in warningList" :key="item.id" :value="item.id" :label='item.title'></Option>
  40. </Select>
  41. </FormItem>
  42. <FormItem label='项目定金:'>
  43. <Input clearable class="form_item" placeholder="请输入项目定金" v-model="formData.front_money" :disabled='type==3'/>
  44. </FormItem>
  45. <FormItem label='详细地址:'>
  46. <Input clearable class="form_item" placeholder="请输入详细地址" v-model="formData.address" :disabled='type==3'/>
  47. </FormItem>
  48. <FormItem label='手机号:'>
  49. <Input clearable class="form_item" placeholder="请输入手机号" v-model="formData.mobile" :disabled='type==3'/>
  50. </FormItem>
  51. <FormItem label='开始日期:'>
  52. <DatePicker type='date' v-model="formData.start_time" placeholder='年/月/日' class="form_item" :disabled='type==3'></DatePicker>
  53. </FormItem>
  54. <FormItem label='交付日期:'>
  55. <DatePicker type='date' v-model="formData.predict_time" placeholder='年/月/日' class="form_item" :disabled='type==3'></DatePicker>
  56. </FormItem>
  57. <FormItem label='业务员:'>
  58. <Select filterable clearable v-model="formData.salesman" class="form_item" :disabled='type==3'>
  59. <Option v-for="item in users" :key="item.id" :value="item.id" :label="item.nickname"></Option>
  60. </Select>
  61. </FormItem>
  62. <FormItem label='备注:'>
  63. <Input type="textarea" class="form_item" placeholder="请输入" v-model="formData.remark" :disabled='type==3'/>
  64. </FormItem>
  65. </Form>
  66. <Card style="max-height:67%;overflow:auto">
  67. <Form :label-width='110' class="form_content">
  68. <FormItem label='区域:'>
  69. <Select filterable clearable class="form_item" v-model="searchData.area">
  70. <Option v-for="(item,index) in TableAreaList" :key="index" :value="item" :label="item"/>
  71. </Select>
  72. </FormItem>
  73. <FormItem label='楼栋:'>
  74. <Select filterable clearable class="form_item" v-model="searchData.house">
  75. <Option v-for="(item,index) in TableHouseList" :key="index" :value="item" :label="item"/>
  76. </Select>
  77. </FormItem>
  78. <FormItem label='单元:'>
  79. <Select filterable clearable class="form_item" v-model="searchData.unit">
  80. <Option v-for="(item,index) in TableUnitList" :key="index" :value="item" :label="item"/>
  81. </Select>
  82. </FormItem>
  83. <FormItem label='楼层:'>
  84. <Select filterable clearable class="form_item" v-model="searchData.layer">
  85. <Option v-for="(item,index) in TableLayerList" :key="index" :value="item" :label="item"/>
  86. </Select>
  87. </FormItem>
  88. <FormItem label='房号:'>
  89. <Select filterable clearable class="form_item" v-model="searchData.number">
  90. <Option v-for="(item,index) in TableNumberList" :key="index" :value="item" :label="item"/>
  91. </Select>
  92. </FormItem>
  93. <FormItem label='产品分类:'>
  94. <Select filterable clearable class="form_item" v-model="searchData.product_type">
  95. <Option v-for="(item,index) in productTypeList" :key="index" :value="item" :label="item"/>
  96. </Select>
  97. </FormItem>
  98. <FormItem label='图号:'>
  99. <Select filterable clearable class="form_item" v-model="searchData.url_number">
  100. <Option v-for="(item,index) in productTitleList" :key="index" :value="item" :label="item"/>
  101. </Select>
  102. </FormItem>
  103. <FormItem label='产品名称:'>
  104. <Select filterable clearable class="form_item" v-model="searchData.title">
  105. <Option v-for="(item,index) in urlNumberList" :key="index" :value="item" :label="item"/>
  106. </Select>
  107. </FormItem>
  108. <FormItem label='左右式:'>
  109. <Select filterable clearable class="form_item" v-model="searchData.fashion">
  110. <Option :value="0" label='无'/>
  111. <Option :value="1" label="左"/>
  112. <Option :value="2" label='右'/>
  113. </Select>
  114. </FormItem>
  115. <FormItem label='拆单状态:' v-if="type==2">
  116. <Select filterable clearable class="form_item" v-model="searchData.explode_status">
  117. <Option :value="0" label='未拆单'/>
  118. <Option :value="1" label="已拆单"/>
  119. </Select>
  120. </FormItem>
  121. <FormItem label='下生产状态:' v-if="type==3">
  122. <Select filterable clearable class="form_item" v-model="searchData.status">
  123. <Option :value="0" label="未下生产"/>
  124. <Option :value="1" label="已下生产"/>
  125. </Select>
  126. </FormItem>
  127. <FormItem :label-width='50'>
  128. <Button type="primary" @click="handleSearch">搜索</Button>
  129. </FormItem>
  130. </Form>
  131. <!-- <div class="over_table">
  132. <Button type="primary" style="float:left" @click="handleSet(null,6)">新增</Button>
  133. <Upload
  134. style="display:inline-block;float:right"
  135. name="your_file"
  136. :show-upload-list="false"
  137. :headers="headers"
  138. :on-error="uploadError"
  139. :on-success="uploadSuccess"
  140. :action="$store.state.ip + '/api/deep_import_news'"
  141. :data='{order_no:recordOrderNO?recordOrderNO:formData.order_no}'
  142. >
  143. <Button type="primary">导入</Button
  144. >
  145. </Upload>
  146. </div> -->
  147. <!-- <Table :data='tableData' :columns='tableColumns' border style="clear:both" max-height='400'>
  148. <template slot="set" slot-scope="{row}">
  149. <a style="margin-right:10px" @click="handleSet(row,1)">拆单</a>
  150. <a style="margin-right:10px" @click="handleSet(row,2)">复制</a>
  151. <a style="margin-right:10px" @click="handleSet(row,3)">详情</a>
  152. <a @click="handleSet(row,4)">删除</a>
  153. </template>
  154. </Table> -->
  155. <vxe-table
  156. border
  157. align='center'
  158. ref="xTable"
  159. max-height='65%'
  160. show-overflow
  161. :data="tableData"
  162. :column-config="{resizable: true}"
  163. :edit-config="{trigger: 'click', mode: 'row'}"
  164. @checkbox-change='handleSelectTable'
  165. @checkbox-all='handleSelectAll'
  166. >
  167. <vxe-column type="checkbox" width="80" title="选择"></vxe-column>
  168. <vxe-column field="order_number" width="120" title="订单编号"></vxe-column>
  169. <vxe-column field="area" width="60" title="区域"></vxe-column>
  170. <vxe-column field="house" width="60" title="楼栋"></vxe-column>
  171. <vxe-column field="unit" width="60" title="单元"></vxe-column>
  172. <vxe-column field="layer" width="60" title="楼层"></vxe-column>
  173. <vxe-column field="number" width="60" title="房号"></vxe-column>
  174. <vxe-column field="product_type" title="产品分类" :edit-render="{enabled:type==3?false:true}" min-width="100">
  175. <template #edit="{ row }">
  176. <vxe-select v-model="row.product_type" type="text" :filterable='true' clearable transfer>
  177. <vxe-option v-for="(item,index) in productTypeList" :key="index" :value="item" :label="item"></vxe-option>
  178. </vxe-select>
  179. </template>
  180. </vxe-column>
  181. <vxe-column field="title" title="产品名称" :edit-render="{enabled:type==3?false:true}" min-width="100">
  182. <template #default="{row}">
  183. <span>{{row.title}}</span>
  184. </template>
  185. <template #edit="{ row }">
  186. <vxe-input v-model="row.title" type="text" :clearable='true'></vxe-input>
  187. </template>
  188. </vxe-column>
  189. <vxe-column field="url_number" title="图号" :edit-render="{enabled:type==3?false:true}" min-width="80">
  190. <!-- <template #default="{ row }">
  191. <span>{{row.sex}}</span>
  192. </template> -->
  193. <template #edit="{ row }">
  194. <vxe-input v-model="row.url_number" type="text"></vxe-input>
  195. </template>
  196. </vxe-column>
  197. <!-- <vxe-column field="measure" title="型号" :edit-render="{enabled:type==3?false:true}" min-width="80">
  198. <template #edit="{ row }">
  199. <vxe-input v-model="row.measure" type="text" placeholder="请输入型号"></vxe-input>
  200. </template>
  201. </vxe-column> -->
  202. <vxe-column field="num" title="数量" min-width="80">
  203. <template #default="{ row }">
  204. <a @click="clickNum(row)">{{row.num}}</a>
  205. </template>
  206. </vxe-column>
  207. <!-- <vxe-column field="long" title="长" :edit-render="{enabled:type==3?false:true}" min-width="80">
  208. <template #edit="{ row }">
  209. <vxe-input v-model="row.long" type="text" placeholder="请输入长" transfer></vxe-input>
  210. </template>
  211. </vxe-column> -->
  212. <!-- <vxe-column field="width" title="宽" :edit-render="{enabled:type==3?false:true}" min-width="80">
  213. <template #edit="{ row }">
  214. <vxe-input v-model="row.width" type="text" placeholder="请输入宽" transfer></vxe-input>
  215. </template>
  216. </vxe-column> -->
  217. <!-- <vxe-column field="high" title="高" :edit-render="{enabled:type==3?false:true}" min-width="80">
  218. <template #edit="{ row }">
  219. <vxe-input v-model="row.high" type="text" placeholder="请输入高" transfer></vxe-input>
  220. </template>
  221. </vxe-column> -->
  222. <!-- <vxe-column field="url" title="图纸" min-width="80">
  223. <template #default="{ row }">
  224. <img
  225. @click="looks(row.url)"
  226. :src="$store.state.ip + row.url"
  227. alt=""
  228. style="width:40px;height:auto"
  229. />
  230. </template>
  231. </vxe-column> -->
  232. <!-- <vxe-column field="fashion" title="左右式" min-width="80">
  233. <template #default='{row}'>
  234. <span>{{row.fashion==1?'左':row.fashion==2?'右':''}}</span>
  235. </template> -->
  236. <!-- <template #edit="{ row }">
  237. <vxe-select v-model="row.date12" type="text" :filterable='true' clearable>
  238. </vxe-select>
  239. </template> -->
  240. <!-- </vxe-column> -->
  241. <!-- <vxe-column field="remark" title="备注" :edit-render="{enabled:type==3?false:true}" min-width="80">
  242. <template #edit="{ row }">
  243. <vxe-input v-model="row.remark" type="text" placeholder="请输入备注" transfer>
  244. </vxe-input>
  245. </template>
  246. </vxe-column> -->
  247. <vxe-column field="explode_status" title="拆单状态" min-width="80">
  248. <template #default="{ row }">
  249. <span>{{row.explode_status==0?'未拆单':'已拆单'}}</span>
  250. </template>
  251. </vxe-column>
  252. <vxe-column field="status" title="生产状态" v-if="type==3" min-width="80">
  253. <template #default="{ row }">
  254. <span>{{row.status==0?'未下生产':'已下生产'}}</span>
  255. </template>
  256. </vxe-column>
  257. <vxe-column title="操作" min-width="150">
  258. <template #default="{ row }">
  259. <!-- <a style="margin-right:10px" @click="handleSet(row,1)" v-show="type==2&&row.status==0&&row.split_state==1">拆单</a> -->
  260. <!-- <a style="margin-right:10px" @click="handleSet(row,2)" v-show="type!=3">复制</a> -->
  261. <a style="margin-right:10px" @click="handleSet(row,3)">详情</a>
  262. <!-- <a @click="handleSet(row,4,$rowIndex)" v-show="type!=3">删除</a> -->
  263. <a @click="handleSet(row,5)" v-show="type==3&&row.explode_status==1&&row.status==0">下生产</a>
  264. </template>
  265. </vxe-column>
  266. </vxe-table>
  267. <div class="footer">
  268. <Page
  269. :page-size-opts="[10, 20, 30, 40, 100]"
  270. @on-page-size-change="changeSize"
  271. @on-change="changePage"
  272. :current="pageIndex"
  273. show-total
  274. :total="total"
  275. show-sizer
  276. transfer
  277. :page-size="pageSize"
  278. />
  279. </div>
  280. </Card>
  281. <Modal title="下生产" width='400' :closable='false' :mask-closable='false' v-model="show_product">
  282. <div style="text-align:center">
  283. <div><label>生产人员:</label><Select v-model="modalProductData.process_man" filterable clearable style="width:200px;margin-bottom:15px">
  284. <Option v-for="item in users" :key="item.id" :value="item.id" :label="item.nickname"></Option>
  285. </Select></div>
  286. <div><label>选择时间:</label><DatePicker type='daterange' v-model="modalProductData.time" style="width:200px" placeholder='年/月/日'></DatePicker></div>
  287. </div>
  288. <div slot="footer">
  289. <Button @click="show_product=false">取消</Button>
  290. <Button type="primary" @click="handleSureProduct">确认</Button>
  291. </div>
  292. </Modal>
  293. <Modal width='1000' footer-hide :mask-closable='false' v-model="show_num">
  294. <Form :label-width='100' style="display:flex;flex-wrap:wrap">
  295. <FormItem label='区域编码:'>
  296. <Select v-model="modalNumData.code" filterable clearable style="width:200px">
  297. <Option v-for="(item,index) in codeList" :key="index" :value="item" :label="item"/>
  298. </Select>
  299. </FormItem>
  300. <FormItem label='区域名称:'>
  301. <Select v-model="modalNumData.title" filterable clearable style="width:200px">
  302. <Option v-for="(item,index) in titleList" :key="index" :value="item" :label="item"/>
  303. </Select>
  304. </FormItem>
  305. <FormItem label='户型:'>
  306. <Select v-model="modalNumData.house_type" filterable clearable style="width:200px">
  307. <Option v-for="(item,index) in houseTypeList" :key="index" :value="item" :label="item"/>
  308. </Select>
  309. </FormItem>
  310. <FormItem label='楼栋:'>
  311. <Select v-model="modalNumData.house" filterable clearable style="width:200px">
  312. <Option v-for="(item,index) in houseList" :key="index" :value="item" :label="item"/>
  313. </Select>
  314. </FormItem>
  315. <FormItem label='单元:'>
  316. <Select v-model="modalNumData.unit" filterable clearable style="width:200px">
  317. <Option v-for="(item,index) in unitList" :key="index" :value="item" :label="item"/>
  318. </Select>
  319. </FormItem>
  320. <FormItem label='楼层:'>
  321. <Select v-model="modalNumData.layer" filterable clearable style="width:200px">
  322. <Option v-for="(item,index) in layerList" :key="index" :value="item" :label="item"/>
  323. </Select>
  324. </FormItem>
  325. <FormItem label='房间号:'>
  326. <Select v-model="modalNumData.number" filterable clearable style="width:200px">
  327. <Option v-for="(item,index) in numberList" :key="index" :value="item" :label="item"/>
  328. </Select>
  329. </FormItem>
  330. <FormItem :label-width='40'>
  331. <Button type="primary" @click="handleNumSearch">搜索</Button>
  332. </FormItem>
  333. </Form>
  334. <Table :data='numTableData' :columns='numTableColumns' border max-height='550'>
  335. </Table>
  336. <div class="footer">
  337. <Page
  338. :page-size-opts="[10, 20, 30, 40, 100]"
  339. @on-page-size-change="numChangeSize"
  340. @on-change="numChangePage"
  341. :current="numPageIndex"
  342. show-total
  343. :total="numTotal"
  344. show-sizer
  345. :page-size="numPageSize"
  346. transfer
  347. />
  348. </div>
  349. </Modal>
  350. <Modal title="强制删除" width='30' :closable='false' :mask-closable='false' v-model="show_del">
  351. <div>
  352. <label>用户名:</label><Input clearable v-model="delData.user_name"/>
  353. </div>
  354. <div>
  355. <label>密码:</label><Input clearable v-model="delData.password" type="password"/>
  356. </div>
  357. <div slot="footer" style="text-align:center">
  358. <Button style="margin-right:10px" @click="show_del=false">取消</Button>
  359. <Button type="primary" @click="handleDelSure">确认</Button>
  360. </div>
  361. </Modal>
  362. </div>
  363. </template>
  364. <script>
  365. export default {
  366. data(){
  367. return{
  368. delData:{
  369. user_name:'',
  370. password:''
  371. },
  372. show_del:false,
  373. selectData:[],
  374. TableHouseList:[],
  375. TableUnitList:[],
  376. TableLayerList:[],
  377. TableAreaList:[],
  378. TableNumberList:[],
  379. codeList:[],
  380. titleList:[],
  381. houseList:[],
  382. houseTypeList:[],
  383. unitList:[],
  384. layerList:[],
  385. numberList:[],
  386. modalNumData:{
  387. code:'',
  388. title:'',
  389. house:'',
  390. house_type:'',
  391. unit:'',
  392. layer:'',
  393. number:''
  394. },
  395. numUrlNumber:'',
  396. numProxyData:{},
  397. numTableData:[],
  398. numTableColumns:[
  399. {title:'序号',type:'index',align:'center',minWidth:100},
  400. {title:'区域编码',key:'code',align:'center',minWidth:100},
  401. {title:'区域名称',key:'title',align:'center',minWidth:100},
  402. {title:'户型',key:'house_type',align:'center',minWidth:100},
  403. {title:'楼栋',key:'house',align:'center',minWidth:100},
  404. {title:'单元',key:'unit',align:'center',minWidth:100},
  405. {title:'楼层',key:'layer',align:'center',minWidth:100},
  406. {title:'房号',key:'number',align:'center',minWidth:100}
  407. ],
  408. numPageIndex:1,
  409. numPageSize:10,
  410. numTotal:0,
  411. show_num:false,
  412. exportProduct:[],
  413. modalProductData:{
  414. time:[],
  415. process_man:'',
  416. },
  417. show_product:false,
  418. proxyData:{},
  419. productTypeList:[],
  420. urlNumberList:[],
  421. productTitleList:[],
  422. searchData:{
  423. layer:'',
  424. unit:'',
  425. number:'',
  426. area:'',
  427. house:'',
  428. product_type:'',
  429. url_number:'',
  430. title:'',
  431. fashion:'',
  432. explode_status:'',
  433. status:''
  434. },
  435. headers: { Authorization: localStorage.getItem("token") },
  436. pageSize:10,
  437. pageIndex:1,
  438. total:0,
  439. tableData:[],
  440. users:[],
  441. warningList:[],
  442. customList:[],
  443. type:'',
  444. formData:{
  445. order_no:'',
  446. residential_name:'',
  447. abbreviation:'',
  448. warning_state:'',
  449. custom_id:null,
  450. // project_title:'',
  451. // abbreviation:'',
  452. // client_id:'',
  453. // warning_state:'',
  454. // front_money:'',
  455. // address:'',
  456. // mobile:'',
  457. // remark:'',
  458. // start_time:'',
  459. // end_time:'',
  460. // user_id:''
  461. },
  462. ruleValidate:{
  463. order_no: [
  464. { required: true, message: '项目编号不能为空!', trigger: 'blur' }
  465. ],
  466. residential_name:[
  467. {required:true,message:'项目名称不能为空',trigger:'blur'}
  468. ],
  469. abbreviation:[
  470. {required:true,message:'项目简称不能为空',trigger:'blur'}
  471. ],
  472. custom_id:[
  473. {required:true,message:'客户名称不能为空',trigger:'change',type:'number'}
  474. ],
  475. warning_state: [
  476. { required: true, message: '紧急程度不能为空', trigger:'blur',type:'number'}
  477. ],
  478. }
  479. }
  480. },
  481. created(){
  482. this.type = this.$route.query.type;
  483. // 获取紧急程度
  484. this.axios.get("/api/warning_list").then((res) => {
  485. this.warningList = res.data.data;
  486. });
  487. //获取客户列表
  488. this.axios.get("/api/custom_list").then((res) => {
  489. this.customList = res.data.data;
  490. });
  491. //获取人员列表
  492. this.axios.get('/api/user').then(res=>{
  493. this.users = res.data.data
  494. })
  495. },
  496. mounted(){
  497. this.initData();
  498. },
  499. methods:{
  500. handleDelSure(){
  501. if(!this.delData.password||!this.delData.user_name){
  502. return this.$Message.warning('请输入完整信息!')
  503. }
  504. let url_number=[];
  505. this.selectData.forEach(v=>{
  506. if(url_number.indexOf(v.url_number)==-1){
  507. url_number.push(v.url_number);
  508. }
  509. })
  510. this.axios.post('/api/split_del',{...this.delData,order_no:this.$route.query.order_no,url_number}).then(res=>{
  511. if(res.code==200){
  512. this.$Message.success(res.msg);
  513. this.show_del = false;
  514. this.initData(this.proxyData);
  515. }
  516. })
  517. },
  518. handleDel(){
  519. if(this.selectData.length==0){
  520. return this.$Message.warning('请选择要强制删除的数据!');
  521. }
  522. this.delData={
  523. user_name:'',
  524. password:''
  525. };
  526. this.show_del=true;
  527. },
  528. handleExport(){
  529. if(this.selectData.length==0){
  530. return this.$Message.warning('请选择要下生产的数据!');
  531. }
  532. if(!this.selectData.every(v=>(v.explode_status==1&&v.status==0))){
  533. return this.$Message.warning('数据中有不能下生产的数据!');
  534. }
  535. this.show_product = true;
  536. let data = [];
  537. this.selectData.forEach(v=>{
  538. data.push({
  539. url_number:[v.url_number],
  540. cut_order_product_ids:v.cut_order_product_ids,
  541. measure:[v.measure],
  542. house_id:[v.house_id],
  543. order_no:v.order_no
  544. })
  545. })
  546. this.exportProduct=data;
  547. },
  548. uploadSuccess(res) {
  549. if (res.code == 200) {
  550. this.$Message.success(res.msg);
  551. this.initData(this.proxyData);
  552. } else {
  553. this.$Message.warning(res.msg || "上传失败");
  554. }
  555. },
  556. uploadError(err) {
  557. this.$Message.error(err.msg || "上传失败");
  558. },
  559. handleSelectAll(e){
  560. let data = [];
  561. e.records.forEach(v=>{
  562. data.push({
  563. id:v.id,
  564. order_no:v.order_no,
  565. product_name:v.title,
  566. url_number:v.url_number,
  567. cut_order_product_ids:v.cut_order_product_id,
  568. measure:v.measure,
  569. house_id:v.house_id,
  570. explode_status:v.explode_status,
  571. status:v.status,
  572. })
  573. })
  574. this.selectData = data;
  575. },
  576. // { checked, row, rowIndex, $rowIndex, column, columnIndex, $columnIndex, $event }
  577. handleSelectTable(e){
  578. console.log(e.records);
  579. let data = [];
  580. e.records.forEach(v=>{
  581. data.push({
  582. id:v.id,
  583. order_no:v.order_no,
  584. product_name:v.title,
  585. url_number:v.url_number,
  586. cut_order_product_ids:v.cut_order_product_id,
  587. measure:v.measure,
  588. house_id:v.house_id,
  589. explode_status:v.explode_status,
  590. status:v.status,
  591. })
  592. })
  593. this.selectData = data;
  594. },
  595. handleTakeApart(){
  596. if(this.selectData.length==0){
  597. return this.$Message.warning('请选择需要拆单的数据!');
  598. }
  599. if(!this.selectData.every(v=>(v.url_number==this.selectData[0].url_number))){
  600. return this.$Message.warning('批量拆单只能选择一个图号!')
  601. }
  602. if(!this.selectData.every(v=>(v.status==0))){
  603. return this.$Message.warning('选择的数据中有不能拆单的数据!')
  604. }
  605. document.getElementsByClassName('ivu-upload-input')[0].click();
  606. },
  607. handleNumSearch(){
  608. let obj = JSON.parse(JSON.stringify(this.modalNumData));
  609. this.numProxyData = obj;
  610. this.numInitData(obj);
  611. },
  612. numChangeSize(e){
  613. this.numPageSize = e;
  614. this.numPageIndex = 1;
  615. this.numInitData(this.numProxyData);
  616. },
  617. numChangePage(e){
  618. this.numPageIndex = e;
  619. this.numInitData(this.numProxyData);
  620. },
  621. numInitData(row){
  622. this.axios.post('/api/split_num_detail',{order_no:this.$route.query.order_no,url_number:this.numUrlNumber,...row,page_index:this.numPageIndex,page_size:this.numPageSize}).then(res=>{
  623. this.numTableData = res.data.data;
  624. this.numTotal = res.data.total;
  625. this.codeList = res.data.code;
  626. this.houseList =res.data.house;
  627. this.houseTypeList = res.data.house_type;
  628. this.layerList = res.data.layer;
  629. this.numberList =res.data.number;
  630. this.titleList = res.data.title;
  631. this.unitList = res.data.unit;
  632. })
  633. },
  634. clickNum(row){
  635. this.numUrlNumber = row.url_number;
  636. this.numInitData();
  637. this.$nextTick(()=>{
  638. this.show_num = true;
  639. })
  640. },
  641. handleSureProduct(){
  642. if(this.modalProductData.time.length!=2||!this.modalProductData.process_man){
  643. return this.$Message.warning('请填写完整数据!')
  644. }
  645. let process_start_time = Date.parse(this.modalProductData.time[0]).toString().slice(0,10);
  646. let process_end_time = Date.parse(this.modalProductData.time[1]).toString().slice(0,10);
  647. let data = [];
  648. this.exportProduct.forEach(ele => {
  649. data.push({...ele,process_man:this.modalProductData.process_man,process_start_time,process_end_time})
  650. });
  651. this.axios.post('/api/split_pull_product',{list:data}).then(res=>{
  652. if(res.code==200){
  653. this.$Message.success(res.msg);
  654. this.show_product=false;
  655. this.initData(this.proxyData);
  656. }
  657. })
  658. },
  659. handleSearch(){
  660. let obj = JSON.parse(JSON.stringify(this.searchData));
  661. this.proxyData = obj;
  662. this.initData(obj);
  663. },
  664. looks(img) {
  665. const array = [{ img_url: img }];
  666. this.$previewImg({
  667. list: array,
  668. baseUrl: this.$store.state.ip,
  669. baseImgField: "img_url",
  670. baseTitleField: "",
  671. });
  672. },
  673. initData(row){
  674. this.axios.get('/api/split_detail',{params:{order_no:this.$route.query.order_no,oa_id:this.$route.query.oa_id,page_size:this.pageSize,page_index:this.pageIndex,...row}}).then(res=>{
  675. this.tableData = res.data.detail.data;
  676. this.total = res.data.detail.total;
  677. this.productTypeList = res.data.product_type;
  678. this.productTitleList = res.data.product_title;
  679. this.urlNumberList = res.data.url_number;
  680. this.TableHouseList = res.data.house;
  681. this.TableUnitList= res.data.unit;
  682. this.TableAreaList = res.data.area;
  683. this.TableNumberList = res.data.number;
  684. this.TableLayerList = res.data.layer;
  685. this.tableData.forEach((v,index)=>{
  686. v.index = index+1
  687. })
  688. this.formData = JSON.parse(JSON.stringify(res.data));
  689. delete this.formData.detail;
  690. if(!this.customList.find(v=>(v.id==this.formData.custom_id))){
  691. this.formData.custom_id=null;
  692. }
  693. this.formData.start_time = this.func.replaceDateNoHMS(this.formData.start_time);
  694. this.formData.predict_time = this.func.replaceDateNoHMS(this.formData.predict_time);
  695. })
  696. },
  697. // uploadSuccess(res) {
  698. // if (res.code == 200) {
  699. // this.axios.post('/api/deep_detail',{order_no:this.recordOrderNO?this.recordOrderNO:this.formData.order_no}).then(res=>{
  700. // this.tableData = res.data.data;
  701. // this.total = res.data.total;
  702. // })
  703. // } else {
  704. // this.$Message.warning(res.msg || "上传失败");
  705. // }
  706. // },
  707. // uploadError(err) {
  708. // this.$Message.error(err.msg || "上传失败");
  709. // },
  710. changeSize(e){
  711. this.pageSize = e;
  712. this.pageIndex =1;
  713. this.initData(this.proxyData);
  714. },
  715. changePage(e){
  716. this.pageIndex = e;
  717. this.initData(this.proxyData);
  718. },
  719. handleSet(row,type,index){//1拆单2复制3详情4删除5下计划6新增
  720. switch(type){
  721. case 3:
  722. case 1:
  723. this.$router.push({path:'/cms/BidSystem/ProductDeOrder/newSplitOrder',query:{order_no:this.$route.query.order_no,...row,type}})
  724. break;
  725. case 2:
  726. // delete row._X_ROW_KEY; //删个下标,不然下表就很奇怪
  727. // let xTable = this.$refs.xTable
  728. // const record = {
  729. // checked: false,
  730. // ...row
  731. // }
  732. // xTable.insertAt(record, row).then(({ row }) => {
  733. // xTable.setActiveRow(row)
  734. // })
  735. let obj = JSON.parse(JSON.stringify(row));
  736. this.tableData.splice(index,0,obj);
  737. this.tableData.forEach((v,idx)=>{
  738. v.index = idx+1;
  739. })
  740. break;
  741. // case 3:
  742. // this.$router.push('/cms/BidSystem/ProductDeOrder/newConfirm')
  743. // break;
  744. case 4:
  745. // this.$refs.xTable.remove(this.$refs.xTable.getData(index))
  746. this.tableData.splice(index,1);
  747. this.tableData.forEach((val,idx)=>{
  748. val.index = idx+1;
  749. })
  750. break;
  751. case 5:
  752. this.show_product = true;
  753. this.exportProduct=[{
  754. url_number:[row.url_number],
  755. cut_order_product_ids:row.cut_order_product_id,
  756. measure:[row.measure],
  757. house_id:[row.house_id],
  758. order_no:row.order_no
  759. }]
  760. break;
  761. case 6:
  762. let data = {};
  763. this.tableData.unshift(data);
  764. this.tableData.forEach((val,idx)=>{
  765. val.index = idx+1;
  766. })
  767. break;
  768. }
  769. },
  770. handleSubmit (name) {
  771. this.$refs[name].validate((valid) => {
  772. if (valid) {
  773. this.handleSave();
  774. } else {
  775. this.$Message.warning('请填写必填信息!');
  776. }
  777. })
  778. },
  779. handleSave(){
  780. this.axios.post('/api/split_order_save',{order_no:this.$route.query.order_no,...this.formData}).then(res=>{
  781. if(res.code==200){
  782. this.$Message.success(res.msg);
  783. this.initData(this.proxyData)
  784. }
  785. })
  786. }
  787. }
  788. }
  789. </script>
  790. <style lang="scss" scoped>
  791. .form_content{
  792. display: flex;
  793. flex-wrap: wrap;
  794. margin-top: 10px;
  795. .form_item{
  796. width:230px
  797. }
  798. }
  799. .over_table{
  800. margin-bottom: 10px;
  801. }
  802. .over_table::after{
  803. content:'';
  804. clear:both;
  805. display: block;
  806. }
  807. .footer{
  808. margin-top: 10px;
  809. text-align: center;
  810. }
  811. </style>