gysDetail.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593
  1. <template>
  2. <div class="app-container">
  3. <el-form ref="form" :model="form" :rules="rules" class="baseinfoClass" >
  4. <el-form-item style="margin-left: -3vw;">
  5. <div class="text-with-line">基本信息</div>
  6. </el-form-item>
  7. <el-form-item>
  8. <el-col :span="6">
  9. <span>企业属性:{{baseInfoData.companyAttributes}}</span>
  10. </el-col>
  11. <el-col :span="6">
  12. <span>供应商编码:{{baseInfoData.companyCode}}</span>
  13. </el-col>
  14. <el-col :span="6">
  15. <span>供应商名称:{{baseInfoData.companyName}}</span>
  16. </el-col>
  17. <el-col :span="6">
  18. <span>纳税人登记号:{{baseInfoData.taxpayerid}}</span>
  19. </el-col>
  20. </el-form-item>
  21. <el-form-item>
  22. <el-col :span="6">
  23. <span>证照分类:{{baseInfoData.licenseType}}</span>
  24. </el-col>
  25. <el-col :span="6">
  26. <span>企业类别:{{baseInfoData.companyType}}</span>
  27. </el-col>
  28. <el-col :span="6">
  29. <span>营业执照号:{{baseInfoData.businessLicenseNumber}}</span>
  30. </el-col>
  31. <el-col :span="6">
  32. <span>注册资金(万元):{{baseInfoData.registeredFund}}</span>
  33. </el-col>
  34. </el-form-item>
  35. <el-form-item>
  36. <el-col :span="6">
  37. <span>成立日期:{{baseInfoData.establishDate}}</span>
  38. </el-col>
  39. <el-col :span="6">
  40. <span>法人:{{baseInfoData.legalbody}}</span>
  41. </el-col>
  42. <el-col :span="6">
  43. <span>e-mail地址:{{baseInfoData.email}}</span>
  44. </el-col>
  45. <el-col :span="6">
  46. <span>企业地址:{{baseInfoData.companyAddress}}</span>
  47. </el-col>
  48. </el-form-item>
  49. <el-form-item>
  50. <el-col :span="6">
  51. <span>供应商税类:{{baseInfoData.supplierTaxType}}</span>
  52. </el-col>
  53. <el-col :span="6">
  54. <span>生产许可证号:{{baseInfoData.productionLicenseNumber}}</span>
  55. </el-col>
  56. <el-col :span="6">
  57. <span>经营许可证号:{{baseInfoData.businessLicenseNumber2}}</span>
  58. </el-col>
  59. <el-col :span="6">
  60. <span>付款协议:{{baseInfoData.payment}}</span>
  61. </el-col>
  62. </el-form-item>
  63. <el-form-item>
  64. <el-col :span="6">
  65. <span>合作有效期起:{{baseInfoData.cooperationWorkStartTime}}</span>
  66. </el-col>
  67. <el-col :span="6">
  68. <span>合作有效期止:{{baseInfoData.cooperationWorkEndTime}}</span>
  69. </el-col>
  70. </el-form-item>
  71. <el-form-item style="margin-left: -3vw;">
  72. <div class="text-with-line">证照信息</div>
  73. </el-form-item>
  74. <el-form-item >
  75. <el-col :span="2" v-for="item in items1" :key="'index1-'+item.id">
  76. <el-tag
  77. :label="item.id"
  78. :value="item.licenseName"
  79. :type="item.serviceState == '0' ? 'danger' : 'info'"
  80. style="width: 7.5vw; text-align: center; height: 4vh; line-height:4vh;"
  81. effect="plain">
  82. {{ item.licenseName }}
  83. </el-tag>
  84. </el-col>
  85. </el-form-item>
  86. <el-form-item >
  87. <el-col :span="2" v-for="item in items2" :key="'index1-'+item.id">
  88. <el-tag
  89. :label="item.id"
  90. :value="item.licenseName"
  91. :type="item.serviceState == '0' ? 'danger' : 'info'"
  92. style="width: 7.5vw; text-align: center; height: 4vh; line-height:4vh;"
  93. effect="plain">
  94. {{ item.licenseName }}
  95. </el-tag>
  96. </el-col>
  97. </el-form-item>
  98. <el-form-item>
  99. <el-col :span="5">
  100. <span>
  101. 证照分类:
  102. <el-select v-model="form.licenseType" clearable placeholder="请选择" :disabled="isFlag">
  103. <el-option
  104. v-for="item in options"
  105. :key="'index3-'+item.value"
  106. :label="item.label"
  107. :value="item.value">
  108. </el-option>
  109. </el-select>
  110. </span>
  111. </el-col>
  112. <el-col :span="12">
  113. <span>证照编号:<el-input v-model="form.licenseNumber" placeholder="请输入证照编号" style="width: 60%" :disabled="isFlag"/></span>
  114. </el-col>
  115. <el-col :span="6">
  116. <span>证照名称:<el-input v-model="form.licenseName" placeholder="请输入证照名称" style="width: 60%" :disabled="isFlag"/></span>
  117. </el-col>
  118. </el-form-item>
  119. <el-form-item>
  120. <el-col :span="5">
  121. <span>颁证机构:<el-input v-model="form.licenseCompany" placeholder="请输入颁证机构" style="width: 60%" :disabled="isFlag"/></span>
  122. </el-col>
  123. <el-col :span="6">
  124. <span>颁发日期:<el-input v-model="form.licenseDate" placeholder="请输入颁发日期" style="width: 60%" :disabled="isFlag"/></span>
  125. </el-col>
  126. <el-col :span="6">
  127. <span>经营方式:<el-input v-model="form.businessType" placeholder="请输入经营方式" style="width: 60%" :disabled="isFlag"/></span>
  128. </el-col>
  129. <el-col :span="6">
  130. <span>经营范围:<el-input v-model="form.businessScope" placeholder="请输入经营范围" style="width: 60%" :disabled="isFlag"/></span>
  131. </el-col>
  132. </el-form-item>
  133. <el-form-item>
  134. <el-col :span="5">
  135. <span>
  136. 有效期至:
  137. <el-date-picker
  138. :disabled="isFlag"
  139. v-model="form.validUntil"
  140. type="date"
  141. placeholder="选择日期">
  142. </el-date-picker>
  143. </span>
  144. </el-col>
  145. <el-col :span="6">
  146. <span>预警天数:<el-input v-model="form.warningDays" placeholder="请输入预警天数" style="width: 60%" :disabled="isFlag"/></span>
  147. </el-col>
  148. <el-col :span="12">
  149. <span>备注:<el-input v-model="form.remark" placeholder="请输入备注" style="width: 60%" :disabled="isFlag"/></span>
  150. </el-col>
  151. </el-form-item>
  152. <el-form-item class="container">
  153. <el-button type="primary" style="margin-right: 4vw;" @click="upload()" :disabled="isFlag">上传证照</el-button>
  154. </el-form-item>
  155. <el-form-item style="margin-left: -3vw; border: 5px solid #fff; padding: 5px; padding-top: 15px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);">
  156. <el-col :span="3" v-for="imgs in imgList" :key="'index4-'+imgs.id" style="border-right: 1px solid #ebeef5;">
  157. <el-image
  158. :src="imgs.filepath"
  159. :preview-src-list="imgs.srcList"
  160. style="width: 165px; height: 165px; margin-left: 1.5vw;"
  161. >
  162. </el-image>
  163. </el-col>
  164. </el-form-item>
  165. <el-form-item style="margin-left: -3vw;">
  166. <div class="text-with-line">经营范围</div>
  167. </el-form-item>
  168. <el-form-item class="container">
  169. <el-button type="danger" style="margin-right: 4vw;" @click="addTable" :disabled="isFlag">新增经营范围</el-button>
  170. </el-form-item>
  171. <el-table
  172. :data="tableData"
  173. highlight-current-row
  174. style="width: 100%; margin-left: -2vw; text-align: center;">
  175. <el-table-column
  176. type="index"
  177. width="50">
  178. </el-table-column>
  179. <el-table-column
  180. property="scopeLevel"
  181. label="范围层级"
  182. width="240">
  183. <template slot-scope="scope">
  184. <el-input v-model="scope.row.scopeLevel" placeholder="请输入范围层级" :disabled="isFlag"></el-input>
  185. </template>
  186. </el-table-column>
  187. <el-table-column
  188. property="code"
  189. label="编码"
  190. width="360">
  191. <template slot-scope="scope">
  192. <el-input v-model="scope.row.code" placeholder="请输入编码" :disabled="isFlag"></el-input>
  193. </template>
  194. </el-table-column>
  195. <el-table-column
  196. property="name"
  197. label="名称"
  198. width="360">
  199. <template slot-scope="scope">
  200. <el-input v-model="scope.row.name" placeholder="请输入名称" :disabled="isFlag"></el-input>
  201. </template>
  202. </el-table-column>
  203. <el-table-column
  204. property="remark"
  205. label="备注"
  206. width="360">
  207. <template slot-scope="scope">
  208. <el-input v-model="scope.row.remark" placeholder="请输入备注" :disabled="isFlag"></el-input>
  209. </template>
  210. </el-table-column>
  211. <el-table-column
  212. label="操作">
  213. <template slot-scope="scope">
  214. <el-button type="danger" icon="el-icon-delete" @click="deleteTable(scope.row)" :disabled="isFlag"></el-button>
  215. </template>
  216. </el-table-column>
  217. </el-table>
  218. <el-form-item>
  219. <div class="button-container">
  220. <el-button type="danger" @click="qx" >取消</el-button>
  221. <el-button type="danger" @click="tj" v-show="!isFlag">提交</el-button>
  222. <el-button type="danger" @click="bc" v-show="!isFlag">保存</el-button>
  223. </div>
  224. </el-form-item>
  225. </el-form>
  226. <el-dialog
  227. title="文件上传"
  228. :visible.sync="dialogVisible"
  229. width="30%"
  230. :before-close="handleClose">
  231. <el-upload
  232. list-type="picture"
  233. class="upload-demo"
  234. action="#"
  235. :on-remove="handleRemove"
  236. :http-request="handleFileUpload"
  237. :file-list="fileList">
  238. <i class="el-icon-upload"></i>
  239. <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
  240. </el-upload>
  241. <span slot="footer" class="dialog-footer">
  242. <el-button @click="canclUpload">取 消</el-button>
  243. <el-button type="primary" @click="submitUpload">确 定</el-button>
  244. </span>
  245. </el-dialog>
  246. </div>
  247. </template>
  248. <script>
  249. import axios from 'axios';
  250. import { getToken } from '@/utils/auth';
  251. import { zjCompanyInfo, byCompanyCode, zjLicenseInfo, byLicenseId, upload } from "@/api/qualityControl/qualityControl";
  252. export default {
  253. name: "qualityControlDetail",
  254. data() {
  255. return {
  256. key:'53cfd89363924f95b75b7221b6d0bfe3',
  257. endpoint:'https://zhiguan.cognitiveservices.azure.cn/',
  258. imgs: '',
  259. isFlag: false,
  260. form: {
  261. xxx: '2'
  262. },
  263. rules: {},
  264. baseInfoData: {
  265. xxx: '1'
  266. },
  267. // 上传
  268. dialogVisible: false,
  269. // action
  270. uploadUrl:
  271. process.env.NODE_ENV == "development"
  272. ? "/drp-file/document-center/fastdfs/upload"
  273. : "/document-center/fastdfs/upload",
  274. // token
  275. headers: {
  276. Authorization: 'Bearer ' + getToken()
  277. },
  278. // 主表ID
  279. id: '',
  280. items1: [],
  281. items2: [],
  282. options: [{
  283. value: '选项1',
  284. label: '黄金糕'
  285. }, {
  286. value: '选项2',
  287. label: '双皮奶'
  288. }, {
  289. value: '选项3',
  290. label: '蚵仔煎'
  291. }, {
  292. value: '选项4',
  293. label: '龙须面'
  294. }, {
  295. value: '选项5',
  296. label: '北京烤鸭'
  297. }],
  298. value: '',
  299. value1: '',
  300. imgList: [
  301. {
  302. id: '1',
  303. filename: 'AAA',
  304. filepath: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
  305. srcList: [
  306. 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg'
  307. ]
  308. },
  309. {
  310. id: '2',
  311. filename: 'BBB',
  312. filepath: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
  313. srcList: [
  314. 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg'
  315. ]
  316. }
  317. ],
  318. tableData: [{
  319. id:'1',
  320. scopeLevel: '2016-05-02',
  321. code: '王1虎',
  322. name: '上海市普陀区金沙江路 1518 弄',
  323. remark: '1123'
  324. }],
  325. companyCode: '',
  326. licenseNumber: '',
  327. fileList: [],
  328. };
  329. },
  330. watch: {
  331. },
  332. created() {
  333. this.companyCode = this.$route.query.companyCode;
  334. this.licenseNumber = this.$route.query.licenseNumber;
  335. if(this.$route.query.isFlag == 'true'){
  336. this.isFlag = true;
  337. }else{
  338. this.isFlag = false;
  339. }
  340. zjCompanyInfo(this.companyCode).then(response => {
  341. if(response.code == 200){
  342. console.log("A1:::" + JSON.stringify(response.data))
  343. this.baseInfoData = response.data;
  344. }
  345. });
  346. byCompanyCode(this.companyCode).then(response => {
  347. if(response.code == 200){
  348. console.log("A2:::" + JSON.stringify(response.data))
  349. if(response.data.length>10){
  350. this.items1 = response.data.slice(0,10)
  351. this.items2 = response.data.slice(10)
  352. }else{
  353. this.items1 = response.data
  354. }
  355. }
  356. });
  357. zjLicenseInfo(this.licenseNumber).then(response => {
  358. if(response.code == 200){
  359. console.log("A3:::" + JSON.stringify(response.data))
  360. this.form = response.data
  361. }
  362. });
  363. byLicenseId(this.licenseNumber).then(response => {
  364. if(response.code == 200){
  365. console.log("A4:::" + JSON.stringify(response.data))
  366. this.tableData = response.data
  367. }
  368. });
  369. },
  370. methods: {
  371. // 修改时自定义上传方法
  372. handleFileUpload(params){
  373. let newfile=params.file
  374. let suffix = (newfile.name).substr((newfile.name).lastIndexOf("."));
  375. newfile =new File([params.file], this.randomLong()+`${suffix}`)
  376. newfile.uid=params.file.uid // new File 没有uid属性,会导致组件底层报错,这里手动加上
  377. console.log(newfile)
  378. // 使用FormData传参数和文件
  379. var fileForm = new FormData();
  380. // 文件
  381. fileForm.append("file", newfile);
  382. // 调用封装好的上传方法,传给后台FormData
  383. upload(fileForm).then(res=>{
  384. if(res && res.data.code == 200){
  385. this.fileList.push({
  386. 'id': res.data.id,
  387. 'name':res.data.filename,
  388. 'url': process.env.NODE_ENV == "development"
  389. ? "https://dev-sy.derom.com/document-center/minio/"+res.data.filepath
  390. : "https://sy.derom.com/document-center/minio/"+res.data.filepath
  391. })
  392. this.imgs = process.env.NODE_ENV == "development"
  393. ? "https://sy.derom.com/01762feca72748b9b343c861753fe6f.png"
  394. : "https://sy.derom.com/document-center/minio/"+res.data.filepath
  395. this.sends()
  396. this.$modal.msgSuccess("上传成功");
  397. }
  398. })
  399. },
  400. upload(){
  401. this.fileList = [];
  402. this.imgList.forEach(element => {
  403. this.fileList.push({
  404. 'id': element.id,
  405. 'name':element.filename,
  406. 'url': element.filepath
  407. })
  408. });
  409. this.dialogVisible = true;
  410. },
  411. handleClose(done) {
  412. this.$confirm('确认关闭?')
  413. .then(_ => {
  414. done();
  415. })
  416. .catch(_ => {});
  417. },
  418. canclUpload(){
  419. this.dialogVisible = false;
  420. },
  421. submitUpload(){
  422. this.imgList = [];
  423. this.fileList.forEach(element => {
  424. let arr = [];
  425. arr.push(element.url);
  426. this.imgList.push({
  427. 'id': element.id,
  428. 'filename': element.name,
  429. 'filepath': element.url,
  430. 'srcList': arr
  431. })
  432. });
  433. this.dialogVisible = false;
  434. },
  435. handleRemove(file, fileList) {
  436. this.fileList = [];
  437. fileList.forEach(element => {
  438. this.fileList.push({
  439. 'id': element.id,
  440. 'name':element.name,
  441. 'url': element.url
  442. })
  443. });
  444. },
  445. addTable() {
  446. const newRow = { id: this.randomLong(), scopeLevel: '', code: '', name: '', remark: '' };
  447. this.tableData.push(newRow);
  448. },
  449. deleteTable(e) {
  450. if(this.tableData.length === 1){
  451. this.$message({
  452. message: '当前行无法删除, 请至少保留一条适用科室信息!',
  453. type: 'warning'
  454. });
  455. return;
  456. }
  457. this.tableData = this.tableData.filter(row =>
  458. row.id != e.id
  459. );
  460. },
  461. randomLong() {
  462. const min = Number.MIN_SAFE_INTEGER;
  463. const max = Number.MAX_SAFE_INTEGER;
  464. // 50% chance of a negative number
  465. const isNegative = Math.random() < 0.5;
  466. const randomValue = Math.random() * (max - min) + min;
  467. return isNegative ? Math.round(randomValue) : Math.round(randomValue) * -1;
  468. },
  469. qx(){
  470. this.$router.go(-1)
  471. },
  472. tj(){
  473. },
  474. bc(){
  475. },
  476. async sends(){
  477. const response = await axios.post('https://zhiguan.cognitiveservices.azure.cn/vision/v3.2/read/analyze', {'url': this.imgs}, {
  478. headers: {
  479. 'Ocp-Apim-Subscription-Key': this.key,
  480. 'Content-Type': 'application/json'
  481. }
  482. });
  483. // console.log("A:::" + JSON.stringify(response))
  484. if(response.status == '202'){
  485. let Operations = response.headers["operation-location"];
  486. // console.log("B:::" + Operations)
  487. setTimeout(()=>{
  488. this.sendGet(Operations);
  489. },1000)
  490. }else{
  491. console.log("图片解析失败!")
  492. }
  493. },
  494. async sendGet(url){
  495. const res = await axios.get(url, {
  496. headers: {
  497. 'Ocp-Apim-Subscription-Key': this.key,
  498. 'Content-Type': 'application/json'
  499. }
  500. });
  501. // console.log("C:::" + JSON.stringify(res))
  502. if(res.data.status == 'succeeded'){
  503. let ocrs = res.data.analyzeResult.readResults;
  504. if(ocrs.length>0){
  505. let lines = ocrs[0].lines;
  506. lines.forEach((element,index) => {
  507. console.log("A:::" + element.text)
  508. if(element.text.includes('许可证编号')||element.text.includes('证照编号')){
  509. this.form.licenseNumber = element.text.substr(6);
  510. if(!lines[index+1].text.includes(":")){
  511. this.form.licenseNumber += lines[index+1].text;
  512. }
  513. }
  514. if((element.text.includes('许可证') && !element.text.includes('编号')) || element.text.includes('证照名称')){
  515. this.form.licenseName = element.text;
  516. if(!lines[index+1].text.includes(":")){
  517. this.form.licenseName += lines[index+1].text;
  518. }
  519. }
  520. if(element.text.includes('发证部门')||element.text.includes('颁证机构')){
  521. this.form.licenseCompany = element.text.substr(5);
  522. if(!lines[index+1].text.includes(":")){
  523. this.form.licenseCompany += lines[index+1].text;
  524. }
  525. }
  526. if(element.text.includes('生产方式') || element.text.includes('经营方式')){
  527. this.form.businessType = element.text.substr(5);
  528. if(!lines[index+1].text.includes(":")){
  529. this.form.businessType += lines[index+1].text;
  530. }
  531. }
  532. if(element.text.includes('生产范围') || element.text.includes('经营范围')){
  533. this.form.businessScope = element.text.substr(5);
  534. if(!lines[index+1].text.includes(":")){
  535. this.form.businessScope += lines[index+1].text;
  536. }
  537. }
  538. if(element.text.includes('至')){
  539. let wb = '';
  540. wb = element.text.substr(2);
  541. if(wb != ''){
  542. wb = wb.replace('年','-');
  543. wb = wb.replace('月','-');
  544. wb = wb.replace('日','');
  545. wb = wb.split(' ').join('')
  546. this.form.validUntil = wb;
  547. }
  548. }
  549. });
  550. }
  551. }
  552. //
  553. },
  554. },
  555. };
  556. </script>
  557. <style>
  558. .baseinfoClass {
  559. margin-left: 4vw;
  560. }
  561. .text-with-line {
  562. position: relative;
  563. font-size: 16px;
  564. color: #333;
  565. padding-bottom: 5px; /* 确保条线在文字下方 */
  566. }
  567. .text-with-line::after {
  568. content: '';
  569. position: absolute;
  570. left: 0;
  571. bottom: 0;
  572. width: 100%; /* 条线的宽度 */
  573. height: 2px; /* 条线的高度 */
  574. background: #000; /* 条线的颜色 */
  575. }
  576. .container {
  577. display: flex;
  578. justify-content: flex-end; /* 这会把子元素放在容器的右边 */
  579. }
  580. .button-container {
  581. position: fixed; /* 使用fixed定位,使得容器始终相对于浏览器窗口 */
  582. top: 10px; /* 距离顶部10像素 */
  583. right: 60px; /* 距离右侧10像素 */
  584. z-index: 1000; /* 设置一个较高的z-index确保按钮在其他内容之上 */
  585. }
  586. </style>